On 4/28/18, Tom Lane <t...@sss.pgh.pa.us> wrote: > John Naylor <jcnay...@gmail.com> writes: >> Solution #1 - As alluded to in [1], turn the conversions into >> pg_proc.dat and pg_conversion.dat entries. Teach genbki.pl to parse >> pg_wchar.h to map conversion names to numbers. >> Pros: >> -likely easy to do >> -allows for the removal of an install target in the Makefile as well >> as ad hoc logic in MSVC >> -uses a format that developers need to use anyway >> Cons: >> -immediately burns up 88 hard-coded OIDs and one for each time a >> conversion proc is created >> -would require editing data in two catalogs every time a conversion >> proc is created > > Given the rate at which new conversion procs have been created > historically (ie, next door to zero, after the initial feature addition), > I don't think that second "con" argument has any force. Eating a batch > of manually-assigned OIDs seems risky mainly just in that it might force > adjustment of pending patches --- but we deal with that all the time. > So I like this answer, I think.
Attached is a draft patch to do this, along with the conversion script used to create the entries. In writing this, a few points came up that are worth bringing up: -In the original SQL file the functions were not declared with an explicit volatility, so by default they are 'volatile'. That seems wrong for this kind of function, so I changed it to 'immutable'. It seems the CREATE CONVERSION facility was created shortly after the volatility classes were created, and I couldn't find any discussion about it. -I have not done performance testing of initdb yet. I'll do so at a later date unless someone is excited enough to beat me to it. -I piggy-backed on the OID lookup machinery for the encoding lookup, but haven't changed all the comments that refer only to catalogs and OIDs. -With the 88 pg_proc entries with prolang=13 along with the 50 or so with prolang=14, it might be worth it to create a language lookup. This patch does not do so, however. -This actually uses up 220 OIDs (88 + 132), since the conversions need them for their comments to be loaded. > However, there is a "con" you didn't mention that perhaps ought to be > accounted for. The way things are done now, neither these C functions > nor the pg_conversion entries are "pinned"; it's possible to drop and/or > recreate them. That perhaps had significant value during development > of the conversions feature, but I'm doubtful that it's worth much > anymore. Still, it's worth pointing out in case somebody disagrees. -For this draft, I let them get pinned, and changed the sanity test to reflect that. It'd be easy enough to add exceptions to setup_depend(), though. (one for pg_conversion, and one to change the pg_proc query to exclude C language functions) I'll create a commitfest entry soon. -John Naylor
From 27605cd5ced2fd0a69598de93491cfb20a74836c Mon Sep 17 00:00:00 2001 From: John Naylor <jcnay...@gmail.com> Date: Wed, 2 May 2018 17:50:53 +0700 Subject: [PATCH v1] Replace ad hoc format for conversion functions Convert info for conversion functions into entries in pg_proc.dat and pg_conversion.dat. This fixes wrong comments on the functions and removes cruft from utils/mb/conversion_procs/Makefile, initdb.c, and msvc/Install.pm. Functional changes: 1. Conversions are now pinned. This can be reverted, but it's not clear there would be any benefit in doing so. 2. The functions are now declared IMMUTABLE. --- src/backend/catalog/Makefile | 2 +- src/backend/catalog/genbki.pl | 56 +++- src/backend/utils/mb/conversion_procs/Makefile | 177 +---------- src/bin/initdb/initdb.c | 26 -- src/include/catalog/pg_conversion.dat | 417 +++++++++++++++++++++++++ src/include/catalog/pg_conversion.h | 42 +-- src/include/catalog/pg_proc.dat | 408 ++++++++++++++++++++++++ src/test/regress/expected/misc_sanity.out | 1 - src/tools/msvc/Install.pm | 38 --- 9 files changed, 906 insertions(+), 261 deletions(-) create mode 100644 src/include/catalog/pg_conversion.dat diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile index a54197d..c987ca0 100644 --- a/src/backend/catalog/Makefile +++ b/src/backend/catalog/Makefile @@ -85,7 +85,7 @@ generated-header-symlinks: $(top_builddir)/src/include/catalog/header-stamp # instead is cheating a bit, but it will achieve the goal of updating the # version number when it changes. bki-stamp: genbki.pl Catalog.pm $(POSTGRES_BKI_SRCS) $(POSTGRES_BKI_DATA) $(top_srcdir)/configure.in - $(PERL) -I $(catalogdir) $< --set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS) + $(PERL) -I $(catalogdir) $< -I $(top_srcdir)/src/include/ --set-version=$(MAJORVERSION) $(POSTGRES_BKI_SRCS) touch $@ # The generated headers must all be symlinked into builddir/src/include/, diff --git a/src/backend/catalog/genbki.pl b/src/backend/catalog/genbki.pl index fb61db0..9e12e8f 100644 --- a/src/backend/catalog/genbki.pl +++ b/src/backend/catalog/genbki.pl @@ -20,6 +20,7 @@ use strict; use warnings; my @input_files; +my $include_path; my $output_path = ''; my $major_version; @@ -35,6 +36,10 @@ while (@ARGV) { $output_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV; } + elsif ($arg =~ /^-I/) + { + $include_path = length($arg) > 2 ? substr($arg, 2) : shift @ARGV; + } elsif ($arg =~ /^--set-version=(.*)$/) { $major_version = $1; @@ -49,13 +54,18 @@ while (@ARGV) # Sanity check arguments. die "No input files.\n" if !@input_files; +die "No include path; you must specify -I.\n" if !$include_path; die "--set-version must be specified.\n" if !defined $major_version; -# Make sure output_path ends in a slash. +# Make sure paths end in a slash. if ($output_path ne '' && substr($output_path, -1) ne '/') { $output_path .= '/'; } +if (substr($include_path, -1) ne '/') +{ + $include_path .= '/'; +} # Read all the files into internal data structures. my @catnames; @@ -157,8 +167,39 @@ my $PG_CATALOG_NAMESPACE = 'PG_CATALOG_NAMESPACE'); -# Build lookup tables for OID macro substitutions and for pg_attribute -# copies of pg_type values. +# Build lookup tables. + +# Encoding identifier lookup. This uses the same machinery as for OIDs. +my %encids; +my $collect_encodings = 0; + +# We're parsing an enum, so start with 0 and increment +# every time we find an enum member. +my $encid = 0; +my $encfile = $include_path . 'mb/pg_wchar.h'; + +open(my $ef, '<', $encfile) || die "$encfile: $!"; +while (<$ef>) +{ + if (/typedef\s+enum\s+pg_enc/) + { + $collect_encodings = 1; + next; + } + + if ($collect_encodings) + { + if (/^\s+(PG_\w+)/) + { + $encids{$1} = $encid++; + } + elsif (/_PG_LAST_ENCODING_/) + { + last; + } + } +} +close $ef; # index access method OID lookup my %amoids; @@ -234,12 +275,16 @@ my %typeoids; my %types; foreach my $row (@{ $catalog_data{pg_type} }) { + # for OID macro substitutions $typeoids{ $row->{typname} } = $row->{oid}; + + # for pg_attribute copies of pg_type values $types{ $row->{typname} } = $row; } -# Map catalog name to OID lookup. +# Map lookup name to the corresponding hash table. my %lookup_kind = ( + encoding => \%encids, pg_am => \%amoids, pg_opclass => \%opcoids, pg_operator => \%operoids, @@ -472,6 +517,9 @@ EOM # postgres.shdescription if (defined $bki_values{descr}) { + die "no OID associated with description \"$bki_values{descr}\"" + if !defined $bki_values{oid}; + if ($catalog->{shared_relation}) { printf $shdescr "%s\t%s\t%s\n", diff --git a/src/backend/utils/mb/conversion_procs/Makefile b/src/backend/utils/mb/conversion_procs/Makefile index 879467e..9669fbb 100644 --- a/src/backend/utils/mb/conversion_procs/Makefile +++ b/src/backend/utils/mb/conversion_procs/Makefile @@ -1,10 +1,11 @@ #------------------------------------------------------------------------- # -# Makefile-- -# Makefile for utils/mb/conversion_procs +# Makefile for utils/mb/conversion_procs # -# IDENTIFICATION -# src/backend/utils/mb/conversion_procs/Makefile +# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/backend/utils/mb/conversion_procs/Makefile # #------------------------------------------------------------------------- @@ -12,8 +13,6 @@ subdir = src/backend/utils/mb/conversion_procs top_builddir = ../../../../.. include $(top_builddir)/src/Makefile.global -SQLSCRIPT = conversion_create.sql - SUBDIRS = \ ascii_and_mic cyrillic_and_mic euc_cn_and_mic euc_jp_and_sjis \ euc_kr_and_mic euc_tw_and_big5 latin2_and_win1250 latin_and_mic \ @@ -25,170 +24,4 @@ SUBDIRS = \ $(recurse) -# conversion_name source_encoding destination_encoding function object -CONVERSIONS = \ - ascii_to_mic SQL_ASCII MULE_INTERNAL ascii_to_mic ascii_and_mic \ - mic_to_ascii MULE_INTERNAL SQL_ASCII mic_to_ascii ascii_and_mic \ - koi8_r_to_mic KOI8R MULE_INTERNAL koi8r_to_mic cyrillic_and_mic \ - mic_to_koi8_r MULE_INTERNAL KOI8R mic_to_koi8r cyrillic_and_mic \ - iso_8859_5_to_mic ISO-8859-5 MULE_INTERNAL iso_to_mic cyrillic_and_mic \ - mic_to_iso_8859_5 MULE_INTERNAL ISO-8859-5 mic_to_iso cyrillic_and_mic \ - windows_1251_to_mic WIN1251 MULE_INTERNAL win1251_to_mic cyrillic_and_mic \ - mic_to_windows_1251 MULE_INTERNAL WIN1251 mic_to_win1251 cyrillic_and_mic \ - windows_866_to_mic WIN866 MULE_INTERNAL win866_to_mic cyrillic_and_mic \ - mic_to_windows_866 MULE_INTERNAL WIN866 mic_to_win866 cyrillic_and_mic \ - koi8_r_to_windows_1251 KOI8R WIN1251 koi8r_to_win1251 cyrillic_and_mic \ - windows_1251_to_koi8_r WIN1251 KOI8R win1251_to_koi8r cyrillic_and_mic \ - koi8_r_to_windows_866 KOI8R WIN866 koi8r_to_win866 cyrillic_and_mic \ - windows_866_to_koi8_r WIN866 KOI8R win866_to_koi8r cyrillic_and_mic \ - windows_866_to_windows_1251 WIN866 WIN1251 win866_to_win1251 cyrillic_and_mic \ - windows_1251_to_windows_866 WIN1251 WIN866 win1251_to_win866 cyrillic_and_mic \ - iso_8859_5_to_koi8_r ISO-8859-5 KOI8R iso_to_koi8r cyrillic_and_mic \ - koi8_r_to_iso_8859_5 KOI8R ISO-8859-5 koi8r_to_iso cyrillic_and_mic \ - iso_8859_5_to_windows_1251 ISO-8859-5 WIN1251 iso_to_win1251 cyrillic_and_mic \ - windows_1251_to_iso_8859_5 WIN1251 ISO-8859-5 win1251_to_iso cyrillic_and_mic \ - iso_8859_5_to_windows_866 ISO-8859-5 WIN866 iso_to_win866 cyrillic_and_mic \ - windows_866_to_iso_8859_5 WIN866 ISO-8859-5 win866_to_iso cyrillic_and_mic \ - euc_cn_to_mic EUC_CN MULE_INTERNAL euc_cn_to_mic euc_cn_and_mic \ - mic_to_euc_cn MULE_INTERNAL EUC_CN mic_to_euc_cn euc_cn_and_mic \ - euc_jp_to_sjis EUC_JP SJIS euc_jp_to_sjis euc_jp_and_sjis \ - sjis_to_euc_jp SJIS EUC_JP sjis_to_euc_jp euc_jp_and_sjis \ - euc_jp_to_mic EUC_JP MULE_INTERNAL euc_jp_to_mic euc_jp_and_sjis \ - sjis_to_mic SJIS MULE_INTERNAL sjis_to_mic euc_jp_and_sjis \ - mic_to_euc_jp MULE_INTERNAL EUC_JP mic_to_euc_jp euc_jp_and_sjis \ - mic_to_sjis MULE_INTERNAL SJIS mic_to_sjis euc_jp_and_sjis \ - euc_kr_to_mic EUC_KR MULE_INTERNAL euc_kr_to_mic euc_kr_and_mic \ - mic_to_euc_kr MULE_INTERNAL EUC_KR mic_to_euc_kr euc_kr_and_mic \ - euc_tw_to_big5 EUC_TW BIG5 euc_tw_to_big5 euc_tw_and_big5 \ - big5_to_euc_tw BIG5 EUC_TW big5_to_euc_tw euc_tw_and_big5 \ - euc_tw_to_mic EUC_TW MULE_INTERNAL euc_tw_to_mic euc_tw_and_big5 \ - big5_to_mic BIG5 MULE_INTERNAL big5_to_mic euc_tw_and_big5 \ - mic_to_euc_tw MULE_INTERNAL EUC_TW mic_to_euc_tw euc_tw_and_big5 \ - mic_to_big5 MULE_INTERNAL BIG5 mic_to_big5 euc_tw_and_big5 \ - iso_8859_2_to_mic LATIN2 MULE_INTERNAL latin2_to_mic latin2_and_win1250 \ - mic_to_iso_8859_2 MULE_INTERNAL LATIN2 mic_to_latin2 latin2_and_win1250 \ - windows_1250_to_mic WIN1250 MULE_INTERNAL win1250_to_mic latin2_and_win1250 \ - mic_to_windows_1250 MULE_INTERNAL WIN1250 mic_to_win1250 latin2_and_win1250 \ - iso_8859_2_to_windows_1250 LATIN2 WIN1250 latin2_to_win1250 latin2_and_win1250 \ - windows_1250_to_iso_8859_2 WIN1250 LATIN2 win1250_to_latin2 latin2_and_win1250 \ - iso_8859_1_to_mic LATIN1 MULE_INTERNAL latin1_to_mic latin_and_mic \ - mic_to_iso_8859_1 MULE_INTERNAL LATIN1 mic_to_latin1 latin_and_mic \ - iso_8859_3_to_mic LATIN3 MULE_INTERNAL latin3_to_mic latin_and_mic \ - mic_to_iso_8859_3 MULE_INTERNAL LATIN3 mic_to_latin3 latin_and_mic \ - iso_8859_4_to_mic LATIN4 MULE_INTERNAL latin4_to_mic latin_and_mic \ - mic_to_iso_8859_4 MULE_INTERNAL LATIN4 mic_to_latin4 latin_and_mic \ - ascii_to_utf8 SQL_ASCII UTF8 ascii_to_utf8 utf8_and_ascii \ - utf8_to_ascii UTF8 SQL_ASCII utf8_to_ascii utf8_and_ascii \ - big5_to_utf8 BIG5 UTF8 big5_to_utf8 utf8_and_big5 \ - utf8_to_big5 UTF8 BIG5 utf8_to_big5 utf8_and_big5 \ - utf8_to_koi8_r UTF8 KOI8R utf8_to_koi8r utf8_and_cyrillic \ - koi8_r_to_utf8 KOI8R UTF8 koi8r_to_utf8 utf8_and_cyrillic \ - utf8_to_koi8_u UTF8 KOI8U utf8_to_koi8u utf8_and_cyrillic \ - koi8_u_to_utf8 KOI8U UTF8 koi8u_to_utf8 utf8_and_cyrillic \ - utf8_to_windows_866 UTF8 WIN866 utf8_to_win utf8_and_win \ - windows_866_to_utf8 WIN866 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_874 UTF8 WIN874 utf8_to_win utf8_and_win \ - windows_874_to_utf8 WIN874 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1250 UTF8 WIN1250 utf8_to_win utf8_and_win \ - windows_1250_to_utf8 WIN1250 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1251 UTF8 WIN1251 utf8_to_win utf8_and_win \ - windows_1251_to_utf8 WIN1251 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1252 UTF8 WIN1252 utf8_to_win utf8_and_win \ - windows_1252_to_utf8 WIN1252 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1253 UTF8 WIN1253 utf8_to_win utf8_and_win \ - windows_1253_to_utf8 WIN1253 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1254 UTF8 WIN1254 utf8_to_win utf8_and_win \ - windows_1254_to_utf8 WIN1254 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1255 UTF8 WIN1255 utf8_to_win utf8_and_win \ - windows_1255_to_utf8 WIN1255 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1256 UTF8 WIN1256 utf8_to_win utf8_and_win \ - windows_1256_to_utf8 WIN1256 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1257 UTF8 WIN1257 utf8_to_win utf8_and_win \ - windows_1257_to_utf8 WIN1257 UTF8 win_to_utf8 utf8_and_win \ - utf8_to_windows_1258 UTF8 WIN1258 utf8_to_win utf8_and_win \ - windows_1258_to_utf8 WIN1258 UTF8 win_to_utf8 utf8_and_win \ - euc_cn_to_utf8 EUC_CN UTF8 euc_cn_to_utf8 utf8_and_euc_cn \ - utf8_to_euc_cn UTF8 EUC_CN utf8_to_euc_cn utf8_and_euc_cn \ - euc_jp_to_utf8 EUC_JP UTF8 euc_jp_to_utf8 utf8_and_euc_jp \ - utf8_to_euc_jp UTF8 EUC_JP utf8_to_euc_jp utf8_and_euc_jp \ - euc_kr_to_utf8 EUC_KR UTF8 euc_kr_to_utf8 utf8_and_euc_kr \ - utf8_to_euc_kr UTF8 EUC_KR utf8_to_euc_kr utf8_and_euc_kr \ - euc_tw_to_utf8 EUC_TW UTF8 euc_tw_to_utf8 utf8_and_euc_tw \ - utf8_to_euc_tw UTF8 EUC_TW utf8_to_euc_tw utf8_and_euc_tw \ - gb18030_to_utf8 GB18030 UTF8 gb18030_to_utf8 utf8_and_gb18030 \ - utf8_to_gb18030 UTF8 GB18030 utf8_to_gb18030 utf8_and_gb18030 \ - gbk_to_utf8 GBK UTF8 gbk_to_utf8 utf8_and_gbk \ - utf8_to_gbk UTF8 GBK utf8_to_gbk utf8_and_gbk \ - utf8_to_iso_8859_2 UTF8 LATIN2 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_2_to_utf8 LATIN2 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_3 UTF8 LATIN3 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_3_to_utf8 LATIN3 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_4 UTF8 LATIN4 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_4_to_utf8 LATIN4 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_9 UTF8 LATIN5 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_9_to_utf8 LATIN5 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_10 UTF8 LATIN6 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_10_to_utf8 LATIN6 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_13 UTF8 LATIN7 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_13_to_utf8 LATIN7 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_14 UTF8 LATIN8 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_14_to_utf8 LATIN8 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_15 UTF8 LATIN9 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_15_to_utf8 LATIN9 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_16 UTF8 LATIN10 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_16_to_utf8 LATIN10 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_5 UTF8 ISO-8859-5 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_5_to_utf8 ISO-8859-5 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_6 UTF8 ISO-8859-6 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_6_to_utf8 ISO-8859-6 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_7 UTF8 ISO-8859-7 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_7_to_utf8 ISO-8859-7 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - utf8_to_iso_8859_8 UTF8 ISO-8859-8 utf8_to_iso8859 utf8_and_iso8859 \ - iso_8859_8_to_utf8 ISO-8859-8 UTF8 iso8859_to_utf8 utf8_and_iso8859 \ - iso_8859_1_to_utf8 LATIN1 UTF8 iso8859_1_to_utf8 utf8_and_iso8859_1 \ - utf8_to_iso_8859_1 UTF8 LATIN1 utf8_to_iso8859_1 utf8_and_iso8859_1 \ - johab_to_utf8 JOHAB UTF8 johab_to_utf8 utf8_and_johab \ - utf8_to_johab UTF8 JOHAB utf8_to_johab utf8_and_johab \ - sjis_to_utf8 SJIS UTF8 sjis_to_utf8 utf8_and_sjis \ - utf8_to_sjis UTF8 SJIS utf8_to_sjis utf8_and_sjis \ - uhc_to_utf8 UHC UTF8 uhc_to_utf8 utf8_and_uhc \ - utf8_to_uhc UTF8 UHC utf8_to_uhc utf8_and_uhc \ - euc_jis_2004_to_utf8 EUC_JIS_2004 UTF8 euc_jis_2004_to_utf8 utf8_and_euc2004 \ - utf8_to_euc_jis_2004 UTF8 EUC_JIS_2004 utf8_to_euc_jis_2004 utf8_and_euc2004 \ - shift_jis_2004_to_utf8 SHIFT_JIS_2004 UTF8 shift_jis_2004_to_utf8 utf8_and_sjis2004 \ - utf8_to_shift_jis_2004 UTF8 SHIFT_JIS_2004 utf8_to_shift_jis_2004 utf8_and_sjis2004 \ - euc_jis_2004_to_shift_jis_2004 EUC_JIS_2004 SHIFT_JIS_2004 euc_jis_2004_to_shift_jis_2004 euc2004_sjis2004 \ - shift_jis_2004_to_euc_jis_2004 SHIFT_JIS_2004 EUC_JIS_2004 shift_jis_2004_to_euc_jis_2004 euc2004_sjis2004 - -all: $(SQLSCRIPT) - -$(SQLSCRIPT): Makefile - @set -e; \ - set $(CONVERSIONS) ; \ - while [ "$$#" -gt 0 ] ; \ - do \ - name=$$1;shift; \ - se=$$1;shift; \ - de=$$1; shift; \ - func=$$1; shift; \ - obj=$$1; shift; \ - echo "-- $$se --> $$de"; \ - echo "CREATE OR REPLACE FUNCTION $$func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '$$"libdir"/$$obj', '$$func' LANGUAGE C STRICT PARALLEL SAFE;"; \ - echo "COMMENT ON FUNCTION $$func(INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) IS 'internal conversion function for $$se to $$de';"; \ - echo "DROP CONVERSION pg_catalog.$$name;"; \ - echo "CREATE DEFAULT CONVERSION pg_catalog.$$name FOR '$$se' TO '$$de' FROM $$func;"; \ - echo "COMMENT ON CONVERSION pg_catalog.$$name IS 'conversion for $$se to $$de';"; \ - echo; \ - done > $@ - -install: $(SQLSCRIPT) installdirs - $(INSTALL_DATA) $(SQLSCRIPT) '$(DESTDIR)$(datadir)' - -installdirs: - $(MKDIR_P) '$(DESTDIR)$(datadir)' '$(DESTDIR)$(pkglibdir)' - -uninstall: - rm -f '$(DESTDIR)$(datadir)/$(SQLSCRIPT)' -clean distclean maintainer-clean: - rm -f $(SQLSCRIPT) diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index b39115c..58fad5c 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -155,7 +155,6 @@ static char *shdesc_file; static char *hba_file; static char *ident_file; static char *conf_file; -static char *conversion_file; static char *dictionary_file; static char *info_schema_file; static char *features_file; @@ -253,7 +252,6 @@ static void setup_depend(FILE *cmdfd); static void setup_sysviews(FILE *cmdfd); static void setup_description(FILE *cmdfd); static void setup_collation(FILE *cmdfd); -static void setup_conversion(FILE *cmdfd); static void setup_dictionary(FILE *cmdfd); static void setup_privileges(FILE *cmdfd); static void set_info_version(void); @@ -1745,26 +1743,6 @@ setup_collation(FILE *cmdfd) } /* - * load conversion functions - */ -static void -setup_conversion(FILE *cmdfd) -{ - char **line; - char **conv_lines; - - conv_lines = readfile(conversion_file); - for (line = conv_lines; *line != NULL; line++) - { - if (strstr(*line, "DROP CONVERSION") != *line) - PG_CMD_PUTS(*line); - free(*line); - } - - free(conv_lines); -} - -/* * load extra dictionaries (Snowball stemmers) */ static void @@ -2645,7 +2623,6 @@ setup_data_file_paths(void) set_input(&hba_file, "pg_hba.conf.sample"); set_input(&ident_file, "pg_ident.conf.sample"); set_input(&conf_file, "postgresql.conf.sample"); - set_input(&conversion_file, "conversion_create.sql"); set_input(&dictionary_file, "snowball_create.sql"); set_input(&info_schema_file, "information_schema.sql"); set_input(&features_file, "sql_features.txt"); @@ -2676,7 +2653,6 @@ setup_data_file_paths(void) check_input(hba_file); check_input(ident_file); check_input(conf_file); - check_input(conversion_file); check_input(dictionary_file); check_input(info_schema_file); check_input(features_file); @@ -3036,8 +3012,6 @@ initialize_data_directory(void) setup_collation(cmdfd); - setup_conversion(cmdfd); - setup_dictionary(cmdfd); setup_privileges(cmdfd); diff --git a/src/include/catalog/pg_conversion.dat b/src/include/catalog/pg_conversion.dat new file mode 100644 index 0000000..fc5efe3 --- /dev/null +++ b/src/include/catalog/pg_conversion.dat @@ -0,0 +1,417 @@ +#---------------------------------------------------------------------- +# +# pg_conversion.dat +# Initial contents of the pg_conversion system catalog. +# +# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/include/catalog/pg_conversion.dat +# +#---------------------------------------------------------------------- + +# Note: conforencoding and contoencoding must match the spelling of +# the labels used in the enum pg_enc in mb/pg_wchar.h. + +[ + +{ oid => '4800', descr => 'conversion for SQL_ASCII to MULE_INTERNAL', + conname => 'ascii_to_mic', conforencoding => 'PG_SQL_ASCII', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'ascii_to_mic' }, +{ oid => '4801', descr => 'conversion for MULE_INTERNAL to SQL_ASCII', + conname => 'mic_to_ascii', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_SQL_ASCII', conproc => 'mic_to_ascii' }, +{ oid => '4802', descr => 'conversion for KOI8R to MULE_INTERNAL', + conname => 'koi8_r_to_mic', conforencoding => 'PG_KOI8R', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'koi8r_to_mic' }, +{ oid => '4803', descr => 'conversion for MULE_INTERNAL to KOI8R', + conname => 'mic_to_koi8_r', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_KOI8R', conproc => 'mic_to_koi8r' }, +{ oid => '4804', descr => 'conversion for ISO-8859-5 to MULE_INTERNAL', + conname => 'iso_8859_5_to_mic', conforencoding => 'PG_ISO_8859_5', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'iso_to_mic' }, +{ oid => '4805', descr => 'conversion for MULE_INTERNAL to ISO-8859-5', + conname => 'mic_to_iso_8859_5', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_ISO_8859_5', conproc => 'mic_to_iso' }, +{ oid => '4806', descr => 'conversion for WIN1251 to MULE_INTERNAL', + conname => 'windows_1251_to_mic', conforencoding => 'PG_WIN1251', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'win1251_to_mic' }, +{ oid => '4807', descr => 'conversion for MULE_INTERNAL to WIN1251', + conname => 'mic_to_windows_1251', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_WIN1251', conproc => 'mic_to_win1251' }, +{ oid => '4808', descr => 'conversion for WIN866 to MULE_INTERNAL', + conname => 'windows_866_to_mic', conforencoding => 'PG_WIN866', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'win866_to_mic' }, +{ oid => '4809', descr => 'conversion for MULE_INTERNAL to WIN866', + conname => 'mic_to_windows_866', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_WIN866', conproc => 'mic_to_win866' }, +{ oid => '4810', descr => 'conversion for KOI8R to WIN1251', + conname => 'koi8_r_to_windows_1251', conforencoding => 'PG_KOI8R', + contoencoding => 'PG_WIN1251', conproc => 'koi8r_to_win1251' }, +{ oid => '4811', descr => 'conversion for WIN1251 to KOI8R', + conname => 'windows_1251_to_koi8_r', conforencoding => 'PG_WIN1251', + contoencoding => 'PG_KOI8R', conproc => 'win1251_to_koi8r' }, +{ oid => '4812', descr => 'conversion for KOI8R to WIN866', + conname => 'koi8_r_to_windows_866', conforencoding => 'PG_KOI8R', + contoencoding => 'PG_WIN866', conproc => 'koi8r_to_win866' }, +{ oid => '4813', descr => 'conversion for WIN866 to KOI8R', + conname => 'windows_866_to_koi8_r', conforencoding => 'PG_WIN866', + contoencoding => 'PG_KOI8R', conproc => 'win866_to_koi8r' }, +{ oid => '4814', descr => 'conversion for WIN866 to WIN1251', + conname => 'windows_866_to_windows_1251', conforencoding => 'PG_WIN866', + contoencoding => 'PG_WIN1251', conproc => 'win866_to_win1251' }, +{ oid => '4815', descr => 'conversion for WIN1251 to WIN866', + conname => 'windows_1251_to_windows_866', conforencoding => 'PG_WIN1251', + contoencoding => 'PG_WIN866', conproc => 'win1251_to_win866' }, +{ oid => '4816', descr => 'conversion for ISO-8859-5 to KOI8R', + conname => 'iso_8859_5_to_koi8_r', conforencoding => 'PG_ISO_8859_5', + contoencoding => 'PG_KOI8R', conproc => 'iso_to_koi8r' }, +{ oid => '4817', descr => 'conversion for KOI8R to ISO-8859-5', + conname => 'koi8_r_to_iso_8859_5', conforencoding => 'PG_KOI8R', + contoencoding => 'PG_ISO_8859_5', conproc => 'koi8r_to_iso' }, +{ oid => '4818', descr => 'conversion for ISO-8859-5 to WIN1251', + conname => 'iso_8859_5_to_windows_1251', conforencoding => 'PG_ISO_8859_5', + contoencoding => 'PG_WIN1251', conproc => 'iso_to_win1251' }, +{ oid => '4819', descr => 'conversion for WIN1251 to ISO-8859-5', + conname => 'windows_1251_to_iso_8859_5', conforencoding => 'PG_WIN1251', + contoencoding => 'PG_ISO_8859_5', conproc => 'win1251_to_iso' }, +{ oid => '4820', descr => 'conversion for ISO-8859-5 to WIN866', + conname => 'iso_8859_5_to_windows_866', conforencoding => 'PG_ISO_8859_5', + contoencoding => 'PG_WIN866', conproc => 'iso_to_win866' }, +{ oid => '4821', descr => 'conversion for WIN866 to ISO-8859-5', + conname => 'windows_866_to_iso_8859_5', conforencoding => 'PG_WIN866', + contoencoding => 'PG_ISO_8859_5', conproc => 'win866_to_iso' }, +{ oid => '4822', descr => 'conversion for EUC_CN to MULE_INTERNAL', + conname => 'euc_cn_to_mic', conforencoding => 'PG_EUC_CN', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'euc_cn_to_mic' }, +{ oid => '4823', descr => 'conversion for MULE_INTERNAL to EUC_CN', + conname => 'mic_to_euc_cn', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_EUC_CN', conproc => 'mic_to_euc_cn' }, +{ oid => '4824', descr => 'conversion for EUC_JP to SJIS', + conname => 'euc_jp_to_sjis', conforencoding => 'PG_EUC_JP', + contoencoding => 'PG_SJIS', conproc => 'euc_jp_to_sjis' }, +{ oid => '4825', descr => 'conversion for SJIS to EUC_JP', + conname => 'sjis_to_euc_jp', conforencoding => 'PG_SJIS', + contoencoding => 'PG_EUC_JP', conproc => 'sjis_to_euc_jp' }, +{ oid => '4826', descr => 'conversion for EUC_JP to MULE_INTERNAL', + conname => 'euc_jp_to_mic', conforencoding => 'PG_EUC_JP', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'euc_jp_to_mic' }, +{ oid => '4827', descr => 'conversion for SJIS to MULE_INTERNAL', + conname => 'sjis_to_mic', conforencoding => 'PG_SJIS', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'sjis_to_mic' }, +{ oid => '4828', descr => 'conversion for MULE_INTERNAL to EUC_JP', + conname => 'mic_to_euc_jp', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_EUC_JP', conproc => 'mic_to_euc_jp' }, +{ oid => '4829', descr => 'conversion for MULE_INTERNAL to SJIS', + conname => 'mic_to_sjis', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_SJIS', conproc => 'mic_to_sjis' }, +{ oid => '4830', descr => 'conversion for EUC_KR to MULE_INTERNAL', + conname => 'euc_kr_to_mic', conforencoding => 'PG_EUC_KR', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'euc_kr_to_mic' }, +{ oid => '4831', descr => 'conversion for MULE_INTERNAL to EUC_KR', + conname => 'mic_to_euc_kr', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_EUC_KR', conproc => 'mic_to_euc_kr' }, +{ oid => '4832', descr => 'conversion for EUC_TW to BIG5', + conname => 'euc_tw_to_big5', conforencoding => 'PG_EUC_TW', + contoencoding => 'PG_BIG5', conproc => 'euc_tw_to_big5' }, +{ oid => '4833', descr => 'conversion for BIG5 to EUC_TW', + conname => 'big5_to_euc_tw', conforencoding => 'PG_BIG5', + contoencoding => 'PG_EUC_TW', conproc => 'big5_to_euc_tw' }, +{ oid => '4834', descr => 'conversion for EUC_TW to MULE_INTERNAL', + conname => 'euc_tw_to_mic', conforencoding => 'PG_EUC_TW', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'euc_tw_to_mic' }, +{ oid => '4835', descr => 'conversion for BIG5 to MULE_INTERNAL', + conname => 'big5_to_mic', conforencoding => 'PG_BIG5', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'big5_to_mic' }, +{ oid => '4836', descr => 'conversion for MULE_INTERNAL to EUC_TW', + conname => 'mic_to_euc_tw', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_EUC_TW', conproc => 'mic_to_euc_tw' }, +{ oid => '4837', descr => 'conversion for MULE_INTERNAL to BIG5', + conname => 'mic_to_big5', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_BIG5', conproc => 'mic_to_big5' }, +{ oid => '4838', descr => 'conversion for LATIN2 to MULE_INTERNAL', + conname => 'iso_8859_2_to_mic', conforencoding => 'PG_LATIN2', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'latin2_to_mic' }, +{ oid => '4839', descr => 'conversion for MULE_INTERNAL to LATIN2', + conname => 'mic_to_iso_8859_2', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_LATIN2', conproc => 'mic_to_latin2' }, +{ oid => '4840', descr => 'conversion for WIN1250 to MULE_INTERNAL', + conname => 'windows_1250_to_mic', conforencoding => 'PG_WIN1250', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'win1250_to_mic' }, +{ oid => '4841', descr => 'conversion for MULE_INTERNAL to WIN1250', + conname => 'mic_to_windows_1250', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_WIN1250', conproc => 'mic_to_win1250' }, +{ oid => '4842', descr => 'conversion for LATIN2 to WIN1250', + conname => 'iso_8859_2_to_windows_1250', conforencoding => 'PG_LATIN2', + contoencoding => 'PG_WIN1250', conproc => 'latin2_to_win1250' }, +{ oid => '4843', descr => 'conversion for WIN1250 to LATIN2', + conname => 'windows_1250_to_iso_8859_2', conforencoding => 'PG_WIN1250', + contoencoding => 'PG_LATIN2', conproc => 'win1250_to_latin2' }, +{ oid => '4844', descr => 'conversion for LATIN1 to MULE_INTERNAL', + conname => 'iso_8859_1_to_mic', conforencoding => 'PG_LATIN1', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'latin1_to_mic' }, +{ oid => '4845', descr => 'conversion for MULE_INTERNAL to LATIN1', + conname => 'mic_to_iso_8859_1', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_LATIN1', conproc => 'mic_to_latin1' }, +{ oid => '4846', descr => 'conversion for LATIN3 to MULE_INTERNAL', + conname => 'iso_8859_3_to_mic', conforencoding => 'PG_LATIN3', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'latin3_to_mic' }, +{ oid => '4847', descr => 'conversion for MULE_INTERNAL to LATIN3', + conname => 'mic_to_iso_8859_3', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_LATIN3', conproc => 'mic_to_latin3' }, +{ oid => '4848', descr => 'conversion for LATIN4 to MULE_INTERNAL', + conname => 'iso_8859_4_to_mic', conforencoding => 'PG_LATIN4', + contoencoding => 'PG_MULE_INTERNAL', conproc => 'latin4_to_mic' }, +{ oid => '4849', descr => 'conversion for MULE_INTERNAL to LATIN4', + conname => 'mic_to_iso_8859_4', conforencoding => 'PG_MULE_INTERNAL', + contoencoding => 'PG_LATIN4', conproc => 'mic_to_latin4' }, +{ oid => '4850', descr => 'conversion for SQL_ASCII to UTF8', + conname => 'ascii_to_utf8', conforencoding => 'PG_SQL_ASCII', + contoencoding => 'PG_UTF8', conproc => 'ascii_to_utf8' }, +{ oid => '4851', descr => 'conversion for UTF8 to SQL_ASCII', + conname => 'utf8_to_ascii', conforencoding => 'PG_UTF8', + contoencoding => 'PG_SQL_ASCII', conproc => 'utf8_to_ascii' }, +{ oid => '4852', descr => 'conversion for BIG5 to UTF8', + conname => 'big5_to_utf8', conforencoding => 'PG_BIG5', + contoencoding => 'PG_UTF8', conproc => 'big5_to_utf8' }, +{ oid => '4853', descr => 'conversion for UTF8 to BIG5', + conname => 'utf8_to_big5', conforencoding => 'PG_UTF8', + contoencoding => 'PG_BIG5', conproc => 'utf8_to_big5' }, +{ oid => '4854', descr => 'conversion for UTF8 to KOI8R', + conname => 'utf8_to_koi8_r', conforencoding => 'PG_UTF8', + contoencoding => 'PG_KOI8R', conproc => 'utf8_to_koi8r' }, +{ oid => '4855', descr => 'conversion for KOI8R to UTF8', + conname => 'koi8_r_to_utf8', conforencoding => 'PG_KOI8R', + contoencoding => 'PG_UTF8', conproc => 'koi8r_to_utf8' }, +{ oid => '4856', descr => 'conversion for UTF8 to KOI8U', + conname => 'utf8_to_koi8_u', conforencoding => 'PG_UTF8', + contoencoding => 'PG_KOI8U', conproc => 'utf8_to_koi8u' }, +{ oid => '4857', descr => 'conversion for KOI8U to UTF8', + conname => 'koi8_u_to_utf8', conforencoding => 'PG_KOI8U', + contoencoding => 'PG_UTF8', conproc => 'koi8u_to_utf8' }, +{ oid => '4858', descr => 'conversion for UTF8 to WIN866', + conname => 'utf8_to_windows_866', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN866', conproc => 'utf8_to_win' }, +{ oid => '4859', descr => 'conversion for WIN866 to UTF8', + conname => 'windows_866_to_utf8', conforencoding => 'PG_WIN866', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4860', descr => 'conversion for UTF8 to WIN874', + conname => 'utf8_to_windows_874', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN874', conproc => 'utf8_to_win' }, +{ oid => '4861', descr => 'conversion for WIN874 to UTF8', + conname => 'windows_874_to_utf8', conforencoding => 'PG_WIN874', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4862', descr => 'conversion for UTF8 to WIN1250', + conname => 'utf8_to_windows_1250', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1250', conproc => 'utf8_to_win' }, +{ oid => '4863', descr => 'conversion for WIN1250 to UTF8', + conname => 'windows_1250_to_utf8', conforencoding => 'PG_WIN1250', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4864', descr => 'conversion for UTF8 to WIN1251', + conname => 'utf8_to_windows_1251', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1251', conproc => 'utf8_to_win' }, +{ oid => '4865', descr => 'conversion for WIN1251 to UTF8', + conname => 'windows_1251_to_utf8', conforencoding => 'PG_WIN1251', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4866', descr => 'conversion for UTF8 to WIN1252', + conname => 'utf8_to_windows_1252', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1252', conproc => 'utf8_to_win' }, +{ oid => '4867', descr => 'conversion for WIN1252 to UTF8', + conname => 'windows_1252_to_utf8', conforencoding => 'PG_WIN1252', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4868', descr => 'conversion for UTF8 to WIN1253', + conname => 'utf8_to_windows_1253', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1253', conproc => 'utf8_to_win' }, +{ oid => '4869', descr => 'conversion for WIN1253 to UTF8', + conname => 'windows_1253_to_utf8', conforencoding => 'PG_WIN1253', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4870', descr => 'conversion for UTF8 to WIN1254', + conname => 'utf8_to_windows_1254', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1254', conproc => 'utf8_to_win' }, +{ oid => '4871', descr => 'conversion for WIN1254 to UTF8', + conname => 'windows_1254_to_utf8', conforencoding => 'PG_WIN1254', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4872', descr => 'conversion for UTF8 to WIN1255', + conname => 'utf8_to_windows_1255', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1255', conproc => 'utf8_to_win' }, +{ oid => '4873', descr => 'conversion for WIN1255 to UTF8', + conname => 'windows_1255_to_utf8', conforencoding => 'PG_WIN1255', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4874', descr => 'conversion for UTF8 to WIN1256', + conname => 'utf8_to_windows_1256', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1256', conproc => 'utf8_to_win' }, +{ oid => '4875', descr => 'conversion for WIN1256 to UTF8', + conname => 'windows_1256_to_utf8', conforencoding => 'PG_WIN1256', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4876', descr => 'conversion for UTF8 to WIN1257', + conname => 'utf8_to_windows_1257', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1257', conproc => 'utf8_to_win' }, +{ oid => '4877', descr => 'conversion for WIN1257 to UTF8', + conname => 'windows_1257_to_utf8', conforencoding => 'PG_WIN1257', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4878', descr => 'conversion for UTF8 to WIN1258', + conname => 'utf8_to_windows_1258', conforencoding => 'PG_UTF8', + contoencoding => 'PG_WIN1258', conproc => 'utf8_to_win' }, +{ oid => '4879', descr => 'conversion for WIN1258 to UTF8', + conname => 'windows_1258_to_utf8', conforencoding => 'PG_WIN1258', + contoencoding => 'PG_UTF8', conproc => 'win_to_utf8' }, +{ oid => '4880', descr => 'conversion for EUC_CN to UTF8', + conname => 'euc_cn_to_utf8', conforencoding => 'PG_EUC_CN', + contoencoding => 'PG_UTF8', conproc => 'euc_cn_to_utf8' }, +{ oid => '4881', descr => 'conversion for UTF8 to EUC_CN', + conname => 'utf8_to_euc_cn', conforencoding => 'PG_UTF8', + contoencoding => 'PG_EUC_CN', conproc => 'utf8_to_euc_cn' }, +{ oid => '4882', descr => 'conversion for EUC_JP to UTF8', + conname => 'euc_jp_to_utf8', conforencoding => 'PG_EUC_JP', + contoencoding => 'PG_UTF8', conproc => 'euc_jp_to_utf8' }, +{ oid => '4883', descr => 'conversion for UTF8 to EUC_JP', + conname => 'utf8_to_euc_jp', conforencoding => 'PG_UTF8', + contoencoding => 'PG_EUC_JP', conproc => 'utf8_to_euc_jp' }, +{ oid => '4884', descr => 'conversion for EUC_KR to UTF8', + conname => 'euc_kr_to_utf8', conforencoding => 'PG_EUC_KR', + contoencoding => 'PG_UTF8', conproc => 'euc_kr_to_utf8' }, +{ oid => '4885', descr => 'conversion for UTF8 to EUC_KR', + conname => 'utf8_to_euc_kr', conforencoding => 'PG_UTF8', + contoencoding => 'PG_EUC_KR', conproc => 'utf8_to_euc_kr' }, +{ oid => '4886', descr => 'conversion for EUC_TW to UTF8', + conname => 'euc_tw_to_utf8', conforencoding => 'PG_EUC_TW', + contoencoding => 'PG_UTF8', conproc => 'euc_tw_to_utf8' }, +{ oid => '4887', descr => 'conversion for UTF8 to EUC_TW', + conname => 'utf8_to_euc_tw', conforencoding => 'PG_UTF8', + contoencoding => 'PG_EUC_TW', conproc => 'utf8_to_euc_tw' }, +{ oid => '4888', descr => 'conversion for GB18030 to UTF8', + conname => 'gb18030_to_utf8', conforencoding => 'PG_GB18030', + contoencoding => 'PG_UTF8', conproc => 'gb18030_to_utf8' }, +{ oid => '4889', descr => 'conversion for UTF8 to GB18030', + conname => 'utf8_to_gb18030', conforencoding => 'PG_UTF8', + contoencoding => 'PG_GB18030', conproc => 'utf8_to_gb18030' }, +{ oid => '4890', descr => 'conversion for GBK to UTF8', + conname => 'gbk_to_utf8', conforencoding => 'PG_GBK', + contoencoding => 'PG_UTF8', conproc => 'gbk_to_utf8' }, +{ oid => '4891', descr => 'conversion for UTF8 to GBK', + conname => 'utf8_to_gbk', conforencoding => 'PG_UTF8', + contoencoding => 'PG_GBK', conproc => 'utf8_to_gbk' }, +{ oid => '4892', descr => 'conversion for UTF8 to LATIN2', + conname => 'utf8_to_iso_8859_2', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN2', conproc => 'utf8_to_iso8859' }, +{ oid => '4893', descr => 'conversion for LATIN2 to UTF8', + conname => 'iso_8859_2_to_utf8', conforencoding => 'PG_LATIN2', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4894', descr => 'conversion for UTF8 to LATIN3', + conname => 'utf8_to_iso_8859_3', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN3', conproc => 'utf8_to_iso8859' }, +{ oid => '4895', descr => 'conversion for LATIN3 to UTF8', + conname => 'iso_8859_3_to_utf8', conforencoding => 'PG_LATIN3', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4896', descr => 'conversion for UTF8 to LATIN4', + conname => 'utf8_to_iso_8859_4', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN4', conproc => 'utf8_to_iso8859' }, +{ oid => '4897', descr => 'conversion for LATIN4 to UTF8', + conname => 'iso_8859_4_to_utf8', conforencoding => 'PG_LATIN4', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4898', descr => 'conversion for UTF8 to LATIN5', + conname => 'utf8_to_iso_8859_9', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN5', conproc => 'utf8_to_iso8859' }, +{ oid => '4899', descr => 'conversion for LATIN5 to UTF8', + conname => 'iso_8859_9_to_utf8', conforencoding => 'PG_LATIN5', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4900', descr => 'conversion for UTF8 to LATIN6', + conname => 'utf8_to_iso_8859_10', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN6', conproc => 'utf8_to_iso8859' }, +{ oid => '4901', descr => 'conversion for LATIN6 to UTF8', + conname => 'iso_8859_10_to_utf8', conforencoding => 'PG_LATIN6', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4902', descr => 'conversion for UTF8 to LATIN7', + conname => 'utf8_to_iso_8859_13', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN7', conproc => 'utf8_to_iso8859' }, +{ oid => '4903', descr => 'conversion for LATIN7 to UTF8', + conname => 'iso_8859_13_to_utf8', conforencoding => 'PG_LATIN7', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4904', descr => 'conversion for UTF8 to LATIN8', + conname => 'utf8_to_iso_8859_14', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN8', conproc => 'utf8_to_iso8859' }, +{ oid => '4905', descr => 'conversion for LATIN8 to UTF8', + conname => 'iso_8859_14_to_utf8', conforencoding => 'PG_LATIN8', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4906', descr => 'conversion for UTF8 to LATIN9', + conname => 'utf8_to_iso_8859_15', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN9', conproc => 'utf8_to_iso8859' }, +{ oid => '4907', descr => 'conversion for LATIN9 to UTF8', + conname => 'iso_8859_15_to_utf8', conforencoding => 'PG_LATIN9', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4908', descr => 'conversion for UTF8 to LATIN10', + conname => 'utf8_to_iso_8859_16', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN10', conproc => 'utf8_to_iso8859' }, +{ oid => '4909', descr => 'conversion for LATIN10 to UTF8', + conname => 'iso_8859_16_to_utf8', conforencoding => 'PG_LATIN10', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4910', descr => 'conversion for UTF8 to ISO-8859-5', + conname => 'utf8_to_iso_8859_5', conforencoding => 'PG_UTF8', + contoencoding => 'PG_ISO_8859_5', conproc => 'utf8_to_iso8859' }, +{ oid => '4911', descr => 'conversion for ISO-8859-5 to UTF8', + conname => 'iso_8859_5_to_utf8', conforencoding => 'PG_ISO_8859_5', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4912', descr => 'conversion for UTF8 to ISO-8859-6', + conname => 'utf8_to_iso_8859_6', conforencoding => 'PG_UTF8', + contoencoding => 'PG_ISO_8859_6', conproc => 'utf8_to_iso8859' }, +{ oid => '4913', descr => 'conversion for ISO-8859-6 to UTF8', + conname => 'iso_8859_6_to_utf8', conforencoding => 'PG_ISO_8859_6', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4914', descr => 'conversion for UTF8 to ISO-8859-7', + conname => 'utf8_to_iso_8859_7', conforencoding => 'PG_UTF8', + contoencoding => 'PG_ISO_8859_7', conproc => 'utf8_to_iso8859' }, +{ oid => '4915', descr => 'conversion for ISO-8859-7 to UTF8', + conname => 'iso_8859_7_to_utf8', conforencoding => 'PG_ISO_8859_7', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4916', descr => 'conversion for UTF8 to ISO-8859-8', + conname => 'utf8_to_iso_8859_8', conforencoding => 'PG_UTF8', + contoencoding => 'PG_ISO_8859_8', conproc => 'utf8_to_iso8859' }, +{ oid => '4917', descr => 'conversion for ISO-8859-8 to UTF8', + conname => 'iso_8859_8_to_utf8', conforencoding => 'PG_ISO_8859_8', + contoencoding => 'PG_UTF8', conproc => 'iso8859_to_utf8' }, +{ oid => '4918', descr => 'conversion for LATIN1 to UTF8', + conname => 'iso_8859_1_to_utf8', conforencoding => 'PG_LATIN1', + contoencoding => 'PG_UTF8', conproc => 'iso8859_1_to_utf8' }, +{ oid => '4919', descr => 'conversion for UTF8 to LATIN1', + conname => 'utf8_to_iso_8859_1', conforencoding => 'PG_UTF8', + contoencoding => 'PG_LATIN1', conproc => 'utf8_to_iso8859_1' }, +{ oid => '4920', descr => 'conversion for JOHAB to UTF8', + conname => 'johab_to_utf8', conforencoding => 'PG_JOHAB', + contoencoding => 'PG_UTF8', conproc => 'johab_to_utf8' }, +{ oid => '4921', descr => 'conversion for UTF8 to JOHAB', + conname => 'utf8_to_johab', conforencoding => 'PG_UTF8', + contoencoding => 'PG_JOHAB', conproc => 'utf8_to_johab' }, +{ oid => '4922', descr => 'conversion for SJIS to UTF8', + conname => 'sjis_to_utf8', conforencoding => 'PG_SJIS', + contoencoding => 'PG_UTF8', conproc => 'sjis_to_utf8' }, +{ oid => '4923', descr => 'conversion for UTF8 to SJIS', + conname => 'utf8_to_sjis', conforencoding => 'PG_UTF8', + contoencoding => 'PG_SJIS', conproc => 'utf8_to_sjis' }, +{ oid => '4924', descr => 'conversion for UHC to UTF8', + conname => 'uhc_to_utf8', conforencoding => 'PG_UHC', + contoencoding => 'PG_UTF8', conproc => 'uhc_to_utf8' }, +{ oid => '4925', descr => 'conversion for UTF8 to UHC', + conname => 'utf8_to_uhc', conforencoding => 'PG_UTF8', + contoencoding => 'PG_UHC', conproc => 'utf8_to_uhc' }, +{ oid => '4926', descr => 'conversion for EUC_JIS_2004 to UTF8', + conname => 'euc_jis_2004_to_utf8', conforencoding => 'PG_EUC_JIS_2004', + contoencoding => 'PG_UTF8', conproc => 'euc_jis_2004_to_utf8' }, +{ oid => '4927', descr => 'conversion for UTF8 to EUC_JIS_2004', + conname => 'utf8_to_euc_jis_2004', conforencoding => 'PG_UTF8', + contoencoding => 'PG_EUC_JIS_2004', conproc => 'utf8_to_euc_jis_2004' }, +{ oid => '4928', descr => 'conversion for SHIFT_JIS_2004 to UTF8', + conname => 'shift_jis_2004_to_utf8', conforencoding => 'PG_SHIFT_JIS_2004', + contoencoding => 'PG_UTF8', conproc => 'shift_jis_2004_to_utf8' }, +{ oid => '4929', descr => 'conversion for UTF8 to SHIFT_JIS_2004', + conname => 'utf8_to_shift_jis_2004', conforencoding => 'PG_UTF8', + contoencoding => 'PG_SHIFT_JIS_2004', conproc => 'utf8_to_shift_jis_2004' }, +{ oid => '4930', descr => 'conversion for EUC_JIS_2004 to SHIFT_JIS_2004', + conname => 'euc_jis_2004_to_shift_jis_2004', + conforencoding => 'PG_EUC_JIS_2004', contoencoding => 'PG_SHIFT_JIS_2004', + conproc => 'euc_jis_2004_to_shift_jis_2004' }, +{ oid => '4931', descr => 'conversion for SHIFT_JIS_2004 to EUC_JIS_2004', + conname => 'shift_jis_2004_to_euc_jis_2004', + conforencoding => 'PG_SHIFT_JIS_2004', contoencoding => 'PG_EUC_JIS_2004', + conproc => 'shift_jis_2004_to_euc_jis_2004' }, + +] diff --git a/src/include/catalog/pg_conversion.h b/src/include/catalog/pg_conversion.h index 37515f6..81a3013 100644 --- a/src/include/catalog/pg_conversion.h +++ b/src/include/catalog/pg_conversion.h @@ -23,29 +23,33 @@ #include "catalog/objectaddress.h" -/* ---------------------------------------------------------------- - * pg_conversion definition. - * - * cpp turns this into typedef struct FormData_pg_namespace - * - * conname name of the conversion - * connamespace name space which the conversion belongs to - * conowner owner of the conversion - * conforencoding FOR encoding id - * contoencoding TO encoding id - * conproc OID of the conversion proc - * condefault true if this is a default conversion - * ---------------------------------------------------------------- +/* ---------------- + * pg_conversion definition. cpp turns this into + * typedef struct FormData_pg_conversion + * ---------------- */ CATALOG(pg_conversion,2607,ConversionRelationId) { + /* name of the conversion */ NameData conname; - Oid connamespace; - Oid conowner; - int32 conforencoding; - int32 contoencoding; - regproc conproc; - bool condefault; + + /* name space which the conversion belongs to */ + Oid connamespace BKI_DEFAULT(PGNSP); + + /* owner of the conversion */ + Oid conowner BKI_DEFAULT(PGUID); + + /* FOR encoding id */ + int32 conforencoding BKI_LOOKUP(encoding); + + /* TO encoding id */ + int32 contoencoding BKI_LOOKUP(encoding); + + /* OID of the conversion proc */ + regproc conproc BKI_LOOKUP(pg_proc); + + /* true if this is a default conversion */ + bool condefault BKI_DEFAULT(t); } FormData_pg_conversion; /* ---------------- diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 66c6c22..266e05a 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -10202,4 +10202,412 @@ proisstrict => 'f', prorettype => 'bool', proargtypes => 'oid int4 int4 any', proargmodes => '{i,i,i,v}', prosrc => 'satisfies_hash_partition' }, +# conversion functions +{ oid => '4400', + descr => 'internal conversion function for SQL_ASCII to MULE_INTERNAL', + proname => 'ascii_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'ascii_to_mic', + probin => '$libdir/ascii_and_mic' }, +{ oid => '4401', + descr => 'internal conversion function for MULE_INTERNAL to SQL_ASCII', + proname => 'mic_to_ascii', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_ascii', + probin => '$libdir/ascii_and_mic' }, +{ oid => '4402', + descr => 'internal conversion function for KOI8R to MULE_INTERNAL', + proname => 'koi8r_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'koi8r_to_mic', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4403', + descr => 'internal conversion function for MULE_INTERNAL to KOI8R', + proname => 'mic_to_koi8r', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_koi8r', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4404', + descr => 'internal conversion function for ISO-8859-5 to MULE_INTERNAL', + proname => 'iso_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'iso_to_mic', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4405', + descr => 'internal conversion function for MULE_INTERNAL to ISO-8859-5', + proname => 'mic_to_iso', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_iso', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4406', + descr => 'internal conversion function for WIN1251 to MULE_INTERNAL', + proname => 'win1251_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win1251_to_mic', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4407', + descr => 'internal conversion function for MULE_INTERNAL to WIN1251', + proname => 'mic_to_win1251', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_win1251', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4408', + descr => 'internal conversion function for WIN866 to MULE_INTERNAL', + proname => 'win866_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win866_to_mic', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4409', + descr => 'internal conversion function for MULE_INTERNAL to WIN866', + proname => 'mic_to_win866', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_win866', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4410', descr => 'internal conversion function for KOI8R to WIN1251', + proname => 'koi8r_to_win1251', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'koi8r_to_win1251', probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4411', descr => 'internal conversion function for WIN1251 to KOI8R', + proname => 'win1251_to_koi8r', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'win1251_to_koi8r', probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4412', descr => 'internal conversion function for KOI8R to WIN866', + proname => 'koi8r_to_win866', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'koi8r_to_win866', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4413', descr => 'internal conversion function for WIN866 to KOI8R', + proname => 'win866_to_koi8r', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win866_to_koi8r', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4414', + descr => 'internal conversion function for WIN866 to WIN1251', + proname => 'win866_to_win1251', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'win866_to_win1251', probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4415', + descr => 'internal conversion function for WIN1251 to WIN866', + proname => 'win1251_to_win866', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'win1251_to_win866', probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4416', + descr => 'internal conversion function for ISO-8859-5 to KOI8R', + proname => 'iso_to_koi8r', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'iso_to_koi8r', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4417', + descr => 'internal conversion function for KOI8R to ISO-8859-5', + proname => 'koi8r_to_iso', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'koi8r_to_iso', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4418', + descr => 'internal conversion function for ISO-8859-5 to WIN1251', + proname => 'iso_to_win1251', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'iso_to_win1251', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4419', + descr => 'internal conversion function for WIN1251 to ISO-8859-5', + proname => 'win1251_to_iso', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win1251_to_iso', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4420', + descr => 'internal conversion function for ISO-8859-5 to WIN866', + proname => 'iso_to_win866', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'iso_to_win866', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4421', + descr => 'internal conversion function for WIN866 to ISO-8859-5', + proname => 'win866_to_iso', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win866_to_iso', + probin => '$libdir/cyrillic_and_mic' }, +{ oid => '4422', + descr => 'internal conversion function for EUC_CN to MULE_INTERNAL', + proname => 'euc_cn_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_cn_to_mic', + probin => '$libdir/euc_cn_and_mic' }, +{ oid => '4423', + descr => 'internal conversion function for MULE_INTERNAL to EUC_CN', + proname => 'mic_to_euc_cn', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_euc_cn', + probin => '$libdir/euc_cn_and_mic' }, +{ oid => '4424', descr => 'internal conversion function for EUC_JP to SJIS', + proname => 'euc_jp_to_sjis', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_jp_to_sjis', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4425', descr => 'internal conversion function for SJIS to EUC_JP', + proname => 'sjis_to_euc_jp', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'sjis_to_euc_jp', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4426', + descr => 'internal conversion function for EUC_JP to MULE_INTERNAL', + proname => 'euc_jp_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_jp_to_mic', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4427', + descr => 'internal conversion function for SJIS to MULE_INTERNAL', + proname => 'sjis_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'sjis_to_mic', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4428', + descr => 'internal conversion function for MULE_INTERNAL to EUC_JP', + proname => 'mic_to_euc_jp', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_euc_jp', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4429', + descr => 'internal conversion function for MULE_INTERNAL to SJIS', + proname => 'mic_to_sjis', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_sjis', + probin => '$libdir/euc_jp_and_sjis' }, +{ oid => '4430', + descr => 'internal conversion function for EUC_KR to MULE_INTERNAL', + proname => 'euc_kr_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_kr_to_mic', + probin => '$libdir/euc_kr_and_mic' }, +{ oid => '4431', + descr => 'internal conversion function for MULE_INTERNAL to EUC_KR', + proname => 'mic_to_euc_kr', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_euc_kr', + probin => '$libdir/euc_kr_and_mic' }, +{ oid => '4432', descr => 'internal conversion function for EUC_TW to BIG5', + proname => 'euc_tw_to_big5', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_tw_to_big5', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4433', descr => 'internal conversion function for BIG5 to EUC_TW', + proname => 'big5_to_euc_tw', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'big5_to_euc_tw', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4434', + descr => 'internal conversion function for EUC_TW to MULE_INTERNAL', + proname => 'euc_tw_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_tw_to_mic', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4435', + descr => 'internal conversion function for BIG5 to MULE_INTERNAL', + proname => 'big5_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'big5_to_mic', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4436', + descr => 'internal conversion function for MULE_INTERNAL to EUC_TW', + proname => 'mic_to_euc_tw', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_euc_tw', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4437', + descr => 'internal conversion function for MULE_INTERNAL to BIG5', + proname => 'mic_to_big5', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_big5', + probin => '$libdir/euc_tw_and_big5' }, +{ oid => '4438', + descr => 'internal conversion function for LATIN2 to MULE_INTERNAL', + proname => 'latin2_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'latin2_to_mic', + probin => '$libdir/latin2_and_win1250' }, +{ oid => '4439', + descr => 'internal conversion function for MULE_INTERNAL to LATIN2', + proname => 'mic_to_latin2', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_latin2', + probin => '$libdir/latin2_and_win1250' }, +{ oid => '4440', + descr => 'internal conversion function for WIN1250 to MULE_INTERNAL', + proname => 'win1250_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win1250_to_mic', + probin => '$libdir/latin2_and_win1250' }, +{ oid => '4441', + descr => 'internal conversion function for MULE_INTERNAL to WIN1250', + proname => 'mic_to_win1250', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_win1250', + probin => '$libdir/latin2_and_win1250' }, +{ oid => '4442', + descr => 'internal conversion function for LATIN2 to WIN1250', + proname => 'latin2_to_win1250', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'latin2_to_win1250', probin => '$libdir/latin2_and_win1250' }, +{ oid => '4443', + descr => 'internal conversion function for WIN1250 to LATIN2', + proname => 'win1250_to_latin2', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'win1250_to_latin2', probin => '$libdir/latin2_and_win1250' }, +{ oid => '4444', + descr => 'internal conversion function for LATIN1 to MULE_INTERNAL', + proname => 'latin1_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'latin1_to_mic', + probin => '$libdir/latin_and_mic' }, +{ oid => '4445', + descr => 'internal conversion function for MULE_INTERNAL to LATIN1', + proname => 'mic_to_latin1', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_latin1', + probin => '$libdir/latin_and_mic' }, +{ oid => '4446', + descr => 'internal conversion function for LATIN3 to MULE_INTERNAL', + proname => 'latin3_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'latin3_to_mic', + probin => '$libdir/latin_and_mic' }, +{ oid => '4447', + descr => 'internal conversion function for MULE_INTERNAL to LATIN3', + proname => 'mic_to_latin3', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_latin3', + probin => '$libdir/latin_and_mic' }, +{ oid => '4448', + descr => 'internal conversion function for LATIN4 to MULE_INTERNAL', + proname => 'latin4_to_mic', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'latin4_to_mic', + probin => '$libdir/latin_and_mic' }, +{ oid => '4449', + descr => 'internal conversion function for MULE_INTERNAL to LATIN4', + proname => 'mic_to_latin4', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'mic_to_latin4', + probin => '$libdir/latin_and_mic' }, +{ oid => '4450', + descr => 'internal conversion function for SQL_ASCII to UTF8', + proname => 'ascii_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'ascii_to_utf8', + probin => '$libdir/utf8_and_ascii' }, +{ oid => '4451', + descr => 'internal conversion function for UTF8 to SQL_ASCII', + proname => 'utf8_to_ascii', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_ascii', + probin => '$libdir/utf8_and_ascii' }, +{ oid => '4452', descr => 'internal conversion function for BIG5 to UTF8', + proname => 'big5_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'big5_to_utf8', + probin => '$libdir/utf8_and_big5' }, +{ oid => '4453', descr => 'internal conversion function for UTF8 to BIG5', + proname => 'utf8_to_big5', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_big5', + probin => '$libdir/utf8_and_big5' }, +{ oid => '4454', descr => 'internal conversion function for UTF8 to KOI8R', + proname => 'utf8_to_koi8r', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_koi8r', + probin => '$libdir/utf8_and_cyrillic' }, +{ oid => '4455', descr => 'internal conversion function for KOI8R to UTF8', + proname => 'koi8r_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'koi8r_to_utf8', + probin => '$libdir/utf8_and_cyrillic' }, +{ oid => '4456', descr => 'internal conversion function for UTF8 to KOI8U', + proname => 'utf8_to_koi8u', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_koi8u', + probin => '$libdir/utf8_and_cyrillic' }, +{ oid => '4457', descr => 'internal conversion function for KOI8U to UTF8', + proname => 'koi8u_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'koi8u_to_utf8', + probin => '$libdir/utf8_and_cyrillic' }, +{ oid => '4458', descr => 'internal conversion function for UTF8 to WIN', + proname => 'utf8_to_win', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_win', + probin => '$libdir/utf8_and_win' }, +{ oid => '4459', descr => 'internal conversion function for WIN to UTF8', + proname => 'win_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'win_to_utf8', + probin => '$libdir/utf8_and_win' }, +{ oid => '4460', descr => 'internal conversion function for EUC_CN to UTF8', + proname => 'euc_cn_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_cn_to_utf8', + probin => '$libdir/utf8_and_euc_cn' }, +{ oid => '4461', descr => 'internal conversion function for UTF8 to EUC_CN', + proname => 'utf8_to_euc_cn', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_euc_cn', + probin => '$libdir/utf8_and_euc_cn' }, +{ oid => '4462', descr => 'internal conversion function for EUC_JP to UTF8', + proname => 'euc_jp_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_jp_to_utf8', + probin => '$libdir/utf8_and_euc_jp' }, +{ oid => '4463', descr => 'internal conversion function for UTF8 to EUC_JP', + proname => 'utf8_to_euc_jp', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_euc_jp', + probin => '$libdir/utf8_and_euc_jp' }, +{ oid => '4464', descr => 'internal conversion function for EUC_KR to UTF8', + proname => 'euc_kr_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_kr_to_utf8', + probin => '$libdir/utf8_and_euc_kr' }, +{ oid => '4465', descr => 'internal conversion function for UTF8 to EUC_KR', + proname => 'utf8_to_euc_kr', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_euc_kr', + probin => '$libdir/utf8_and_euc_kr' }, +{ oid => '4466', descr => 'internal conversion function for EUC_TW to UTF8', + proname => 'euc_tw_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'euc_tw_to_utf8', + probin => '$libdir/utf8_and_euc_tw' }, +{ oid => '4467', descr => 'internal conversion function for UTF8 to EUC_TW', + proname => 'utf8_to_euc_tw', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_euc_tw', + probin => '$libdir/utf8_and_euc_tw' }, +{ oid => '4468', descr => 'internal conversion function for GB18030 to UTF8', + proname => 'gb18030_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'gb18030_to_utf8', + probin => '$libdir/utf8_and_gb18030' }, +{ oid => '4469', descr => 'internal conversion function for UTF8 to GB18030', + proname => 'utf8_to_gb18030', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_gb18030', + probin => '$libdir/utf8_and_gb18030' }, +{ oid => '4470', descr => 'internal conversion function for GBK to UTF8', + proname => 'gbk_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'gbk_to_utf8', + probin => '$libdir/utf8_and_gbk' }, +{ oid => '4471', descr => 'internal conversion function for UTF8 to GBK', + proname => 'utf8_to_gbk', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_gbk', + probin => '$libdir/utf8_and_gbk' }, +{ oid => '4472', + descr => 'internal conversion function for UTF8 to ISO-8859 2-16', + proname => 'utf8_to_iso8859', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_iso8859', + probin => '$libdir/utf8_and_iso8859' }, +{ oid => '4473', + descr => 'internal conversion function for ISO-8859 2-16 to UTF8', + proname => 'iso8859_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'iso8859_to_utf8', + probin => '$libdir/utf8_and_iso8859' }, +{ oid => '4474', descr => 'internal conversion function for LATIN1 to UTF8', + proname => 'iso8859_1_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'iso8859_1_to_utf8', probin => '$libdir/utf8_and_iso8859_1' }, +{ oid => '4475', descr => 'internal conversion function for UTF8 to LATIN1', + proname => 'utf8_to_iso8859_1', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'utf8_to_iso8859_1', probin => '$libdir/utf8_and_iso8859_1' }, +{ oid => '4476', descr => 'internal conversion function for JOHAB to UTF8', + proname => 'johab_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'johab_to_utf8', + probin => '$libdir/utf8_and_johab' }, +{ oid => '4477', descr => 'internal conversion function for UTF8 to JOHAB', + proname => 'utf8_to_johab', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_johab', + probin => '$libdir/utf8_and_johab' }, +{ oid => '4478', descr => 'internal conversion function for SJIS to UTF8', + proname => 'sjis_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'sjis_to_utf8', + probin => '$libdir/utf8_and_sjis' }, +{ oid => '4479', descr => 'internal conversion function for UTF8 to SJIS', + proname => 'utf8_to_sjis', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_sjis', + probin => '$libdir/utf8_and_sjis' }, +{ oid => '4480', descr => 'internal conversion function for UHC to UTF8', + proname => 'uhc_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'uhc_to_utf8', + probin => '$libdir/utf8_and_uhc' }, +{ oid => '4481', descr => 'internal conversion function for UTF8 to UHC', + proname => 'utf8_to_uhc', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', prosrc => 'utf8_to_uhc', + probin => '$libdir/utf8_and_uhc' }, +{ oid => '4482', + descr => 'internal conversion function for EUC_JIS_2004 to UTF8', + proname => 'euc_jis_2004_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'euc_jis_2004_to_utf8', probin => '$libdir/utf8_and_euc2004' }, +{ oid => '4483', + descr => 'internal conversion function for UTF8 to EUC_JIS_2004', + proname => 'utf8_to_euc_jis_2004', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'utf8_to_euc_jis_2004', probin => '$libdir/utf8_and_euc2004' }, +{ oid => '4484', + descr => 'internal conversion function for SHIFT_JIS_2004 to UTF8', + proname => 'shift_jis_2004_to_utf8', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'shift_jis_2004_to_utf8', probin => '$libdir/utf8_and_sjis2004' }, +{ oid => '4485', + descr => 'internal conversion function for UTF8 to SHIFT_JIS_2004', + proname => 'utf8_to_shift_jis_2004', prolang => '13', prorettype => 'void', + proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'utf8_to_shift_jis_2004', probin => '$libdir/utf8_and_sjis2004' }, +{ oid => '4486', + descr => 'internal conversion function for EUC_JIS_2004 to SHIFT_JIS_2004', + proname => 'euc_jis_2004_to_shift_jis_2004', prolang => '13', + prorettype => 'void', proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'euc_jis_2004_to_shift_jis_2004', + probin => '$libdir/euc2004_sjis2004' }, +{ oid => '4487', + descr => 'internal conversion function for SHIFT_JIS_2004 to EUC_JIS_2004', + proname => 'shift_jis_2004_to_euc_jis_2004', prolang => '13', + prorettype => 'void', proargtypes => 'int4 int4 cstring internal int4', + prosrc => 'shift_jis_2004_to_euc_jis_2004', + probin => '$libdir/euc2004_sjis2004' }, + ] diff --git a/src/test/regress/expected/misc_sanity.out b/src/test/regress/expected/misc_sanity.out index 5aaae6c..0e523b1 100644 --- a/src/test/regress/expected/misc_sanity.out +++ b/src/test/regress/expected/misc_sanity.out @@ -71,7 +71,6 @@ loop end loop; end$$; NOTICE: pg_constraint contains unpinned initdb-created object(s) -NOTICE: pg_conversion contains unpinned initdb-created object(s) NOTICE: pg_database contains unpinned initdb-created object(s) NOTICE: pg_extension contains unpinned initdb-created object(s) NOTICE: pg_rewrite contains unpinned initdb-created object(s) diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index 4cc1b57..e60067e 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -137,7 +137,6 @@ sub Install CopyFiles( 'Error code data', $target . '/share/', 'src/backend/utils/', 'errcodes.txt'); - GenerateConversionScript($target); GenerateTimezoneFiles($target, $conf); GenerateTsearchFiles($target); CopySetOfFiles( @@ -340,43 +339,6 @@ sub CopySolutionOutput print "\n"; } -sub GenerateConversionScript -{ - my $target = shift; - my $sql = ""; - my $F; - - print "Generating conversion proc script..."; - my $mf = read_file('src/backend/utils/mb/conversion_procs/Makefile'); - $mf =~ s{\\\r?\n}{}g; - $mf =~ /^CONVERSIONS\s*=\s*(.*)$/m - || die "Could not find CONVERSIONS line in conversions Makefile\n"; - my @pieces = split /\s+/, $1; - while ($#pieces > 0) - { - my $name = shift @pieces; - my $se = shift @pieces; - my $de = shift @pieces; - my $func = shift @pieces; - my $obj = shift @pieces; - $sql .= "-- $se --> $de\n"; - $sql .= - "CREATE OR REPLACE FUNCTION $func (INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) RETURNS VOID AS '\$libdir/$obj', '$func' LANGUAGE C STRICT;\n"; - $sql .= - "COMMENT ON FUNCTION $func(INTEGER, INTEGER, CSTRING, INTERNAL, INTEGER) IS 'internal conversion function for $se to $de';\n"; - $sql .= "DROP CONVERSION pg_catalog.$name;\n"; - $sql .= - "CREATE DEFAULT CONVERSION pg_catalog.$name FOR '$se' TO '$de' FROM $func;\n"; - $sql .= - "COMMENT ON CONVERSION pg_catalog.$name IS 'conversion for $se to $de';\n\n"; - } - open($F, '>', "$target/share/conversion_create.sql") - || die "Could not write to conversion_create.sql\n"; - print $F $sql; - close($F); - print "\n"; -} - sub GenerateTimezoneFiles { my $target = shift; -- 2.7.4
v1-convert_conversion2dat.pl
Description: Perl program