Skip to content

Commit 75b6104

Browse files
committed
> I had to back out the patch. It only compiles with multi-byte enabled.
Ooops, I forget... here it is again. > > > If encoding is not supported returns ERROR. and if multibyte not enabled too.... Thanks. Karel ~
1 parent 4ebb751 commit 75b6104

File tree

4 files changed

+240
-3
lines changed

4 files changed

+240
-3
lines changed

src/backend/utils/adt/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#
22
# Makefile for utils/adt
33
#
4-
# $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.43 2000/08/04 20:46:43 momjian Exp $
4+
# $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.44 2000/08/05 14:59:17 momjian Exp $
55
#
66

77
subdir = src/backend/utils/adt
@@ -23,7 +23,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o \
2323
regexp.o regproc.o ruleutils.o selfuncs.o sets.o \
2424
tid.o timestamp.o varbit.o varchar.o varlena.o version.o \
2525
network.o mac.o inet_net_ntop.o inet_net_pton.o \
26-
ri_triggers.o pg_lzcompress.o pg_locale.o formatting.o
26+
ri_triggers.o pg_lzcompress.o pg_locale.o formatting.o \
27+
ascii.o
2728

2829
all: SUBSYS.o
2930

src/backend/utils/adt/ascii.c

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
2+
/* -----------------------------------------------------------------------
3+
* ascii.c
4+
*
5+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ascii.c,v 1.3 2000/08/05 14:59:17 momjian Exp $
6+
*
7+
* Portions Copyright (c) 1999-2000, PostgreSQL, Inc
8+
*
9+
*
10+
* TO_ASCII()
11+
*
12+
* The PostgreSQL routine for string to ascii conversion.
13+
*
14+
* -----------------------------------------------------------------------
15+
*/
16+
17+
#include "postgres.h"
18+
#include "utils/builtins.h"
19+
#include "mb/pg_wchar.h"
20+
#include "utils/ascii.h"
21+
22+
/* ----------
23+
* even if MULTIBYTE is not enabled, these functions are necessary
24+
* since pg_proc.h has references to them.
25+
* ----------
26+
*/
27+
#ifndef MULTIBYTE
28+
29+
static void multibyte_error(void);
30+
31+
static void
32+
multibyte_error()
33+
{
34+
elog(ERROR, "multibyte not supported.");
35+
}
36+
37+
Datum
38+
to_ascii_encname(PG_FUNCTION_ARGS)
39+
{
40+
multibyte_error();
41+
}
42+
43+
Datum
44+
to_ascii_enc(PG_FUNCTION_ARGS)
45+
{
46+
multibyte_error();
47+
}
48+
49+
Datum
50+
to_ascii_default(PG_FUNCTION_ARGS)
51+
{
52+
multibyte_error();
53+
}
54+
55+
56+
#else /* with MULTIBYTE */
57+
58+
59+
/* ----------
60+
* even if MULTIBYTE is enabled
61+
* ----------
62+
*/
63+
64+
static text *encode_to_ascii(text *data, int enc);
65+
66+
/* ----------
67+
* to_ascii
68+
* ----------
69+
*/
70+
char *
71+
pg_to_ascii(unsigned char *src, unsigned char *src_end, unsigned char *desc, int enc)
72+
{
73+
unsigned char *x = NULL;
74+
unsigned char *ascii = NULL ;
75+
int range = 0;
76+
77+
/*
78+
* relevant start for an encoding
79+
*/
80+
#define RANGE_128 128
81+
#define RANGE_160 160
82+
83+
84+
if (enc == LATIN1)
85+
{
86+
/* ----------
87+
* ISO-8859-1 <range: 160 -- 255>
88+
* ----------
89+
*/
90+
ascii = " cL Y \"Ca -R 'u ., ?AAAAAAACEEEEIIII NOOOOOxOUUUUYTBaaaaaaaceeeeiiii nooooo/ouuuuyty";
91+
range = RANGE_160;
92+
}
93+
else if (enc == LATIN2)
94+
{
95+
/* ----------
96+
* ISO-8859-2 <range: 160 -- 255>
97+
* ----------
98+
*/
99+
ascii = " A L LS \"SSTZ-ZZ a,l'ls ,sstz\"zzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTBraaaalccceeeeiiddnnoooo/ruuuuyt.";
100+
range = RANGE_160;
101+
}
102+
else if (enc == WIN1250)
103+
{
104+
/* ----------
105+
* Window CP1250 <range: 128 -- 255>
106+
* ----------
107+
*/
108+
ascii = " ' \" %S<STZZ `'\"\".-- s>stzz L A \"CS -RZ ,l'u .,as L\"lzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTBraaaalccceeeeiiddnnoooo/ruuuuyt ";
109+
range = RANGE_128;
110+
}
111+
else
112+
{
113+
elog(ERROR, "pg_to_ascii(): unsupported encoding from %s",
114+
pg_encoding_to_char(enc));
115+
}
116+
117+
/* ----------
118+
* Encode
119+
* ----------
120+
*/
121+
for (x = src; x <= src_end; x++)
122+
{
123+
if (*x < 128)
124+
*desc++ = *x;
125+
else if (*x < range)
126+
*desc++ = ' '; /* bogus 128 to 'range' */
127+
else
128+
*desc++ = ascii[*x - range];
129+
}
130+
131+
return desc;
132+
}
133+
134+
/* ----------
135+
* encode text
136+
* ----------
137+
*/
138+
static text *
139+
encode_to_ascii(text *data, int enc)
140+
{
141+
pg_to_ascii(
142+
(unsigned char *) VARDATA(data), /* src */
143+
VARDATA(data) + VARSIZE(data), /* src end */
144+
(unsigned char *) VARDATA(data), /* desc */
145+
enc); /* encoding */
146+
147+
return data;
148+
}
149+
150+
/* ----------
151+
* convert to ASCII - enc is set as 'name' arg.
152+
* ----------
153+
*/
154+
Datum
155+
to_ascii_encname(PG_FUNCTION_ARGS)
156+
{
157+
PG_RETURN_TEXT_P
158+
(
159+
encode_to_ascii
160+
(
161+
PG_GETARG_TEXT_P_COPY(0),
162+
pg_char_to_encoding( NameStr(*PG_GETARG_NAME(1)) )
163+
)
164+
);
165+
}
166+
167+
/* ----------
168+
* convert to ASCII - enc is set as int4
169+
* ----------
170+
*/
171+
Datum
172+
to_ascii_enc(PG_FUNCTION_ARGS)
173+
{
174+
PG_RETURN_TEXT_P
175+
(
176+
encode_to_ascii
177+
(
178+
PG_GETARG_TEXT_P_COPY(0),
179+
PG_GETARG_INT32(1)
180+
)
181+
);
182+
}
183+
184+
/* ----------
185+
* convert to ASCII - current enc is DatabaseEncoding
186+
* ----------
187+
*/
188+
Datum
189+
to_ascii_default(PG_FUNCTION_ARGS)
190+
{
191+
PG_RETURN_TEXT_P
192+
(
193+
encode_to_ascii
194+
(
195+
PG_GETARG_TEXT_P_COPY(0),
196+
GetDatabaseEncoding()
197+
)
198+
);
199+
}
200+
201+
#endif /* MULTIBYTE */

src/include/catalog/pg_proc.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_proc.h,v 1.159 2000/08/04 20:46:43 momjian Exp $
10+
* $Id: pg_proc.h,v 1.160 2000/08/05 14:59:19 momjian Exp $
1111
*
1212
* NOTES
1313
* The script catalog/genbki.sh reads this file and generates .bki
@@ -2442,6 +2442,14 @@ DESCR("aggregate transition function");
24422442
DATA(insert OID = 1844 ( interval_avg PGUID 12 f t t t 1 f 1186 "1187" 100 0 0 100 interval_avg - ));
24432443
DESCR("AVG aggregate final function");
24442444

2445+
/* To ASCII conversion */
2446+
DATA(insert OID = 1845 ( to_ascii PGUID 12 f t t t 1 f 25 "25" 100 0 0 100 to_ascii_default - ));
2447+
DESCR("encode text from DB encoding to ASCII text");
2448+
DATA(insert OID = 1846 ( to_ascii PGUID 12 f t t t 2 f 25 "25 23" 100 0 0 100 to_ascii_enc - ));
2449+
DESCR("encode text from encoding to ASCII text");
2450+
DATA(insert OID = 1847 ( to_ascii PGUID 12 f t t t 2 f 25 "25 19" 100 0 0 100 to_ascii_encname - ));
2451+
DESCR("encode text from encoding to ASCII text");
2452+
24452453
DATA(insert OID = 1850 ( int28eq PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100 int28eq - ));
24462454
DESCR("equal");
24472455
DATA(insert OID = 1851 ( int28ne PGUID 12 f t t t 2 f 16 "21 20" 100 0 0 100 int28ne - ));

src/include/utils/ascii.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
/* -----------------------------------------------------------------------
3+
* ascii.h
4+
*
5+
* $Id: ascii.h,v 1.3 2000/08/05 14:59:29 momjian Exp $
6+
*
7+
* Portions Copyright (c) 1999-2000, PostgreSQL, Inc
8+
*
9+
* -----------------------------------------------------------------------
10+
*/
11+
12+
#ifndef _ASCII_H_
13+
#define _ASCII_H_
14+
15+
#include "fmgr.h"
16+
17+
extern Datum to_ascii_encname(PG_FUNCTION_ARGS);
18+
extern Datum to_ascii_enc(PG_FUNCTION_ARGS);
19+
extern Datum to_ascii_default(PG_FUNCTION_ARGS);
20+
21+
#ifdef MULTIBYTE
22+
23+
extern char *pg_to_ascii(unsigned char *src, unsigned char *src_end,
24+
unsigned char *desc, int enc);
25+
#endif /* MULTIBYTE */
26+
27+
#endif /* _ASCII_H_ */

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy