From 609026bb6b9cc05f9aa0e5a4ad7e06b5a352e969 Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Sun, 15 Mar 1998 07:53:03 +0000
Subject: [PATCH] From: t-ishii@sra.co.jp

Included are patches intended for allowing PostgreSQL to handle
multi-byte charachter sets such as EUC(Extende Unix Code), Unicode and
Mule internal code. With the MB patch you can use multi-byte character
sets in regexp and LIKE. The encoding system chosen is determined at
the compile time.

To enable the MB extension, you need to define a variable "MB" in
Makefile.global or in Makefile.custom. For further information please
take a look at README.mb under doc directory.

(Note that unlike "jp patch" I do not use modified GNU regexp any
more. I changed Henry Spencer's regexp coming with PostgreSQL.)
---
 src/test/regress/expected/euc_cn.out        | 55 +++++++++++++
 src/test/regress/expected/euc_jp.out        | 55 +++++++++++++
 src/test/regress/expected/mule_internal.out | 85 +++++++++++++++++++++
 src/test/regress/sql/euc_cn.sql             | 15 ++++
 src/test/regress/sql/euc_jp.sql             | 15 ++++
 src/test/regress/sql/mule_internal.sql      | 21 +++++
 6 files changed, 246 insertions(+)
 create mode 100644 src/test/regress/expected/euc_cn.out
 create mode 100644 src/test/regress/expected/euc_jp.out
 create mode 100644 src/test/regress/expected/mule_internal.out
 create mode 100644 src/test/regress/sql/euc_cn.sql
 create mode 100644 src/test/regress/sql/euc_jp.sql
 create mode 100644 src/test/regress/sql/mule_internal.sql

diff --git a/src/test/regress/expected/euc_cn.out b/src/test/regress/expected/euc_cn.out
new file mode 100644
index 00000000000..d927b28d205
--- /dev/null
+++ b/src/test/regress/expected/euc_cn.out
@@ -0,0 +1,55 @@
+QUERY: drop table 计算机术语;
+ERROR:  Relation 计算机术语 Does Not Exist!
+QUERY: create table 计算机术语(术语 text, 分类号 varchar, 备注1A char(16));
+QUERY: create index 计算机术语index1 on 计算机术语 using btree(术语);
+QUERY: create index 计算机术语index2 on 计算机术语 using btree(分类号);
+QUERY: insert into 计算机术语 values('电脑显示屏','机A01上');
+QUERY: insert into 计算机术语 values('电脑图形','分B01中');
+QUERY: insert into 计算机术语 values('电脑程序员','人Z01下');
+QUERY: vacuum 计算机术语;
+QUERY: select * from 计算机术语;
+术语      |分类号 |备注1a
+----------+-------+------
+电脑显示屏|机A01上|      
+电脑图形  |分B01中|      
+电脑程序员|人Z01下|      
+(3 rows)
+
+QUERY: select * from 计算机术语 where 分类号 = '人Z01下';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑程序员|人Z01下|      
+(1 row)
+
+QUERY: select * from 计算机术语 where 分类号 ~* '人z01下';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑程序员|人Z01下|      
+(1 row)
+
+QUERY: select * from 计算机术语 where 分类号 like '_Z01_';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑程序员|人Z01下|      
+(1 row)
+
+QUERY: select * from 计算机术语 where 分类号 like '_Z%';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑程序员|人Z01下|      
+(1 row)
+
+QUERY: select * from 计算机术语 where 术语 ~ '电脑[显图]';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑显示屏|机A01上|      
+电脑图形  |分B01中|      
+(2 rows)
+
+QUERY: select * from 计算机术语 where 术语 ~* '电脑[显图]';
+术语      |分类号 |备注1a
+----------+-------+------
+电脑显示屏|机A01上|      
+电脑图形  |分B01中|      
+(2 rows)
+
diff --git a/src/test/regress/expected/euc_jp.out b/src/test/regress/expected/euc_jp.out
new file mode 100644
index 00000000000..c710392738f
--- /dev/null
+++ b/src/test/regress/expected/euc_jp.out
@@ -0,0 +1,55 @@
+QUERY: drop table 纷换怠脱胳;
+ERROR:  Relation 纷换怠脱胳 Does Not Exist!
+QUERY: create table 纷换怠脱胳 (脱胳 text, 尸梧コ〖ド varchar, 洒雇1Aだよ char(16));
+QUERY: create index 纷换怠脱胳index1 on 纷换怠脱胳 using btree (脱胳);
+QUERY: create index 纷换怠脱胳index2 on 纷换怠脱胳 using hash (尸梧コ〖ド);
+QUERY: insert into 纷换怠脱胳 values('コンピュ〖タディスプレイ','怠A01惧');
+QUERY: insert into 纷换怠脱胳 values('コンピュ〖タグラフィックス','尸B10面');
+QUERY: insert into 纷换怠脱胳 values('コンピュ〖タプログラマ〖','客Z01布');
+QUERY: vacuum 纷换怠脱胳;
+QUERY: select * from 纷换怠脱胳;
+脱胳                      |尸梧コ〖ド|洒雇1aだよ
+--------------------------+----------+----------
+コンピュ〖タディスプレイ  |怠A01惧   |          
+コンピュ〖タグラフィックス|尸B10面   |          
+コンピュ〖タプログラマ〖  |客Z01布   |          
+(3 rows)
+
+QUERY: select * from 纷换怠脱胳 where 尸梧コ〖ド = '客Z01布';
+脱胳                    |尸梧コ〖ド|洒雇1aだよ
+------------------------+----------+----------
+コンピュ〖タプログラマ〖|客Z01布   |          
+(1 row)
+
+QUERY: select * from 纷换怠脱胳 where 尸梧コ〖ド ~* '客z01布';
+脱胳                    |尸梧コ〖ド|洒雇1aだよ
+------------------------+----------+----------
+コンピュ〖タプログラマ〖|客Z01布   |          
+(1 row)
+
+QUERY: select * from 纷换怠脱胳 where 尸梧コ〖ド like '_Z01_';
+脱胳                    |尸梧コ〖ド|洒雇1aだよ
+------------------------+----------+----------
+コンピュ〖タプログラマ〖|客Z01布   |          
+(1 row)
+
+QUERY: select * from 纷换怠脱胳 where 尸梧コ〖ド like '_Z%';
+脱胳                    |尸梧コ〖ド|洒雇1aだよ
+------------------------+----------+----------
+コンピュ〖タプログラマ〖|客Z01布   |          
+(1 row)
+
+QUERY: select * from 纷换怠脱胳 where 脱胳 ~ 'コンピュ〖タ[デグ]';
+脱胳                      |尸梧コ〖ド|洒雇1aだよ
+--------------------------+----------+----------
+コンピュ〖タディスプレイ  |怠A01惧   |          
+コンピュ〖タグラフィックス|尸B10面   |          
+(2 rows)
+
+QUERY: select * from 纷换怠脱胳 where 脱胳 ~* 'コンピュ〖タ[デグ]';
+脱胳                      |尸梧コ〖ド|洒雇1aだよ
+--------------------------+----------+----------
+コンピュ〖タディスプレイ  |怠A01惧   |          
+コンピュ〖タグラフィックス|尸B10面   |          
+(2 rows)
+
diff --git a/src/test/regress/expected/mule_internal.out b/src/test/regress/expected/mule_internal.out
new file mode 100644
index 00000000000..c797072e3d9
--- /dev/null
+++ b/src/test/regress/expected/mule_internal.out
@@ -0,0 +1,85 @@
+QUERY: drop table 挿讙换挼脱捀�;
+ERROR:  Relation 挿讙换挼脱捀� Does Not Exist!
+QUERY: create table 挿讙换挼脱捀� (捦褣胳 text, 捠瑨梧挜硳〖挜� varchar, 捜鲯雇1A挙罀よ char(16));
+QUERY: create index 挿讙换挼脱捀靑ndex1 on 挿讙换挼脱捀� using btree (捦褣胳);
+QUERY: create index 挿讙换挼脱捀靑ndex2 on 挿讙换挼脱捀� using hash (捠瑨梧挜硳〖挜�);
+QUERY: insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜菕ィ挜箳プ挜鞉イ','挼01捑�');
+QUERY: insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜皰ラ挜諕ィ挜脪ク挜�','捠珺10捗�');
+QUERY: insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖','捒蚙01挷�');
+QUERY: insert into 挿讙换挼脱捀� values('懙鐟脑懴詰示懫�','懟鶤01懮�');
+QUERY: insert into 挿讙换挼脱捀� values('懙鐟脑懲紤形','懛諦01懼�');
+QUERY: insert into 挿讙换挼脱捀� values('懙鐟脑懗虘序懺�','懭薢01懴�');
+QUERY: vacuum 挿讙换挼脱捀�;
+QUERY: select * from 挿讙换挼脱捀�;
+捦褣胳                                 |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+---------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜菕ィ挜箳プ挜鞉イ   |挼01捑�      |              
+挜硳ン挜話ュ挕紥タ挜皰ラ挜諕ィ挜脪ク挜箌捠珺10捗�      |              
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖   |捒蚙01挷�      |              
+懙鐟脑懴詰示懫�                        |懟鶤01懮�      |              
+懙鐟脑懲紤形                           |懛諦01懼�      |              
+懙鐟脑懗虘序懺�                        |懭薢01懴�      |              
+(6 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� = '捒蚙01挷�';
+捦褣胳                              |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖|捒蚙01挷�      |              
+(1 row)
+
+QUERY: select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� ~ 'Z01';
+捦褣胳                              |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖|捒蚙01挷�      |              
+懙鐟脑懗虘序懺�                     |懭薢01懴�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� ~* 'z01';
+捦褣胳                              |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖|捒蚙01挷�      |              
+懙鐟脑懗虘序懺�                     |懭薢01懴�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� like '_Z01_';
+捦褣胳                              |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖|捒蚙01挷�      |              
+懙鐟脑懗虘序懺�                     |懭薢01懴�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� like '_Z%';
+捦褣胳                              |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖|捒蚙01挷�      |              
+懙鐟脑懗虘序懺�                     |懭薢01懴�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捦褣胳 ~ '挜硳ン挜話ュ挕紥タ[挜菕グ]';
+捦褣胳                                 |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+---------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜菕ィ挜箳プ挜鞉イ   |挼01捑�      |              
+挜硳ン挜話ュ挕紥タ挜皰ラ挜諕ィ挜脪ク挜箌捠珺10捗�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捦褣胳 ~* '挜硳ン挜話ュ挕紥タ[挜菕グ]';
+捦褣胳                                 |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+---------------------------------------+---------------+--------------
+挜硳ン挜話ュ挕紥タ挜菕ィ挜箳プ挜鞉イ   |挼01捑�      |              
+挜硳ン挜話ュ挕紥タ挜皰ラ挜諕ィ挜脪ク挜箌捠珺10捗�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捦褣胳 ~ '懙鐟脑[懴詰图]';
+捦褣胳         |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+---------------+---------------+--------------
+懙鐟脑懴詰示懫羭懟鶤01懮�      |              
+懙鐟脑懲紤形   |懛諦01懼�      |              
+(2 rows)
+
+QUERY: select * from 挿讙换挼脱捀� where 捦褣胳 ~* '懙鐟脑[懴詰图]';
+捦褣胳         |捠瑨梧挜硳〖挜蓔捜鲯雇1a挙罀よ
+---------------+---------------+--------------
+懙鐟脑懴詰示懫羭懟鶤01懮�      |              
+懙鐟脑懲紤形   |懛諦01懼�      |              
+(2 rows)
+
diff --git a/src/test/regress/sql/euc_cn.sql b/src/test/regress/sql/euc_cn.sql
new file mode 100644
index 00000000000..461c0c864f8
--- /dev/null
+++ b/src/test/regress/sql/euc_cn.sql
@@ -0,0 +1,15 @@
+drop table 计算机术语;
+create table 计算机术语(术语 text, 分类号 varchar, 备注1A char(16));
+create index 计算机术语index1 on 计算机术语 using btree(术语);
+create index 计算机术语index2 on 计算机术语 using btree(分类号);
+insert into 计算机术语 values('电脑显示屏','机A01上');
+insert into 计算机术语 values('电脑图形','分B01中');
+insert into 计算机术语 values('电脑程序员','人Z01下');
+vacuum 计算机术语;
+select * from 计算机术语;
+select * from 计算机术语 where 分类号 = '人Z01下';
+select * from 计算机术语 where 分类号 ~* '人z01下';
+select * from 计算机术语 where 分类号 like '_Z01_';
+select * from 计算机术语 where 分类号 like '_Z%';
+select * from 计算机术语 where 术语 ~ '电脑[显图]';
+select * from 计算机术语 where 术语 ~* '电脑[显图]';
diff --git a/src/test/regress/sql/euc_jp.sql b/src/test/regress/sql/euc_jp.sql
new file mode 100644
index 00000000000..8cba58055d5
--- /dev/null
+++ b/src/test/regress/sql/euc_jp.sql
@@ -0,0 +1,15 @@
+drop table 纷换怠脱胳;
+create table 纷换怠脱胳 (脱胳 text, 尸梧コ〖ド varchar, 洒雇1Aだよ char(16));
+create index 纷换怠脱胳index1 on 纷换怠脱胳 using btree (脱胳);
+create index 纷换怠脱胳index2 on 纷换怠脱胳 using hash (尸梧コ〖ド);
+insert into 纷换怠脱胳 values('コンピュ〖タディスプレイ','怠A01惧');
+insert into 纷换怠脱胳 values('コンピュ〖タグラフィックス','尸B10面');
+insert into 纷换怠脱胳 values('コンピュ〖タプログラマ〖','客Z01布');
+vacuum 纷换怠脱胳;
+select * from 纷换怠脱胳;
+select * from 纷换怠脱胳 where 尸梧コ〖ド = '客Z01布';
+select * from 纷换怠脱胳 where 尸梧コ〖ド ~* '客z01布';
+select * from 纷换怠脱胳 where 尸梧コ〖ド like '_Z01_';
+select * from 纷换怠脱胳 where 尸梧コ〖ド like '_Z%';
+select * from 纷换怠脱胳 where 脱胳 ~ 'コンピュ〖タ[デグ]';
+select * from 纷换怠脱胳 where 脱胳 ~* 'コンピュ〖タ[デグ]';
diff --git a/src/test/regress/sql/mule_internal.sql b/src/test/regress/sql/mule_internal.sql
new file mode 100644
index 00000000000..6d07906ff78
--- /dev/null
+++ b/src/test/regress/sql/mule_internal.sql
@@ -0,0 +1,21 @@
+drop table 挿讙换挼脱捀�;
+create table 挿讙换挼脱捀� (捦褣胳 text, 捠瑨梧挜硳〖挜� varchar, 捜鲯雇1A挙罀よ char(16));
+create index 挿讙换挼脱捀靑ndex1 on 挿讙换挼脱捀� using btree (捦褣胳);
+create index 挿讙换挼脱捀靑ndex2 on 挿讙换挼脱捀� using hash (捠瑨梧挜硳〖挜�);
+insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜菕ィ挜箳プ挜鞉イ','挼01捑�');
+insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜皰ラ挜諕ィ挜脪ク挜�','捠珺10捗�');
+insert into 挿讙换挼脱捀� values('挜硳ン挜話ュ挕紥タ挜讙ロ挜皰ラ挜迴〖','捒蚙01挷�');
+insert into 挿讙换挼脱捀� values('懙鐟脑懴詰示懫�','懟鶤01懮�');
+insert into 挿讙换挼脱捀� values('懙鐟脑懲紤形','懛諦01懼�');
+insert into 挿讙换挼脱捀� values('懙鐟脑懗虘序懺�','懭薢01懴�');
+vacuum 挿讙换挼脱捀�;
+select * from 挿讙换挼脱捀�;
+select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� = '捒蚙01挷�';
+select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� ~ 'Z01';
+select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� ~* 'z01';
+select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� like '_Z01_';
+select * from 挿讙换挼脱捀� where 捠瑨梧挜硳〖挜� like '_Z%';
+select * from 挿讙换挼脱捀� where 捦褣胳 ~ '挜硳ン挜話ュ挕紥タ[挜菕グ]';
+select * from 挿讙换挼脱捀� where 捦褣胳 ~* '挜硳ン挜話ュ挕紥タ[挜菕グ]';
+select * from 挿讙换挼脱捀� where 捦褣胳 ~ '懙鐟脑[懴詰图]';
+select * from 挿讙换挼脱捀� where 捦褣胳 ~* '懙鐟脑[懴詰图]';
-- 
GitLab