Hello!
Attached to the mail is locale-patch.tar.gz. In the archive there are: file README.locale short description directory src/test/locale test suite; currently only koi8-r tests, but the suite can be easily extended file locale.patch the very patch; to apply: patch < locale.patch; should be applied to postgres-6.3.2 (at least I created it with 6.3.2 without any additional patches) Files touched by the patch: src/include/utils/builtins.h src/backend/utils/adt/char.c src/backend/utils/adt/varchar.c src/backend/utils/adt/varlena.c Oleg
This commit is contained in:
parent
67a636918a
commit
8d8bcda253
17
doc/README.locale
Normal file
17
doc/README.locale
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
1998 May 25
|
||||
|
||||
I extended locale support. Now ORDER BY (if PostgreSQL configured with
|
||||
--enable-locale) uses strcoll() for all text fields: char(n), varchar(n),
|
||||
text. (I am not sure about ORDER BY char2/char4/etc.)
|
||||
|
||||
I included test suite .../src/test/locale. I didn't include this in
|
||||
the regression test because not so much people require locale support. Read
|
||||
.../src/test/locale/README for details on the test suite.
|
||||
|
||||
Many thanks to Oleg Bartunov (oleg@sai.msu.su) and Thomas G. Lockhart
|
||||
(lockhart@alumni.caltech.edu) for hints, tips, help and discussion.
|
||||
|
||||
Oleg.
|
||||
----
|
||||
Oleg Broytmann http://members.tripod.com/~phd2/ phd2@earthling.net
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.33 1998/06/15 19:29:38 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.34 1998/06/16 06:41:50 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -475,7 +475,7 @@ bpcharlt(char *arg1, char *arg2)
|
||||
len1 = bcTruelen(arg1);
|
||||
len2 = bcTruelen(arg2);
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (cmp == 0)
|
||||
return (len1 < len2);
|
||||
else
|
||||
@ -494,7 +494,7 @@ bpcharle(char *arg1, char *arg2)
|
||||
len1 = bcTruelen(arg1);
|
||||
len2 = bcTruelen(arg2);
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (0 == cmp)
|
||||
return (bool) (len1 <= len2 ? 1 : 0);
|
||||
else
|
||||
@ -513,7 +513,7 @@ bpchargt(char *arg1, char *arg2)
|
||||
len1 = bcTruelen(arg1);
|
||||
len2 = bcTruelen(arg2);
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (cmp == 0)
|
||||
return (len1 > len2);
|
||||
else
|
||||
@ -532,7 +532,7 @@ bpcharge(char *arg1, char *arg2)
|
||||
len1 = bcTruelen(arg1);
|
||||
len2 = bcTruelen(arg2);
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (0 == cmp)
|
||||
return (bool) (len1 >= len2 ? 1 : 0);
|
||||
else
|
||||
@ -549,7 +549,7 @@ bpcharcmp(char *arg1, char *arg2)
|
||||
len1 = bcTruelen(arg1);
|
||||
len2 = bcTruelen(arg2);
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if ((0 == cmp) && (len1 != len2))
|
||||
return (int32) (len1 < len2 ? -1 : 1);
|
||||
else
|
||||
@ -641,7 +641,7 @@ varcharlt(char *arg1, char *arg2)
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (cmp == 0)
|
||||
return (len1 < len2);
|
||||
else
|
||||
@ -660,7 +660,7 @@ varcharle(char *arg1, char *arg2)
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (0 == cmp)
|
||||
return (bool) (len1 <= len2 ? 1 : 0);
|
||||
else
|
||||
@ -679,7 +679,7 @@ varchargt(char *arg1, char *arg2)
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (cmp == 0)
|
||||
return (len1 > len2);
|
||||
else
|
||||
@ -698,7 +698,7 @@ varcharge(char *arg1, char *arg2)
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
|
||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if (0 == cmp)
|
||||
return (bool) (len1 >= len2 ? 1 : 0);
|
||||
else
|
||||
@ -715,7 +715,7 @@ varcharcmp(char *arg1, char *arg2)
|
||||
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
cmp = (strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2)));
|
||||
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||
if ((0 == cmp) && (len1 != len2))
|
||||
return (int32) (len1 < len2 ? -1 : 1);
|
||||
else
|
||||
|
@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.36 1998/06/15 19:29:38 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.37 1998/06/16 06:41:51 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -468,116 +468,87 @@ textne(text *arg1, text *arg2)
|
||||
return ((bool) !texteq(arg1, arg2));
|
||||
}
|
||||
|
||||
/* text_lt()
|
||||
/* varstr_cmp()
|
||||
* Comparison function for text strings with given lengths.
|
||||
* Includes locale support, but must copy strings to temporary memory
|
||||
* to allow null-termination for inputs to strcoll().
|
||||
* Returns -1, 0 or 1
|
||||
*/
|
||||
int
|
||||
varstr_cmp(unsigned char *arg1, int len1, unsigned char *arg2, int len2)
|
||||
{
|
||||
int result;
|
||||
unsigned char *a1p, *a2p;
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
a1p = (unsigned char *) palloc(len1 + 1);
|
||||
a2p = (unsigned char *) palloc(len2 + 1);
|
||||
|
||||
memcpy(a1p, arg1, len1);
|
||||
*(a1p + len1) = '\0';
|
||||
memcpy(a2p, arg2, len2);
|
||||
*(a2p + len2) = '\0';
|
||||
|
||||
result = strcoll(a1p, a2p);
|
||||
|
||||
pfree(a1p);
|
||||
pfree(a2p);
|
||||
|
||||
#else
|
||||
|
||||
a1p = arg1;
|
||||
a2p = arg2;
|
||||
|
||||
result = strncmp(a1p, a2p, Min(len1, len2));
|
||||
if ((result == 0) && (len1 != len2))
|
||||
result = (len1 < len2) ? -1 : 1;
|
||||
#endif
|
||||
|
||||
return (result);
|
||||
} /* varstr_cmp() */
|
||||
|
||||
/* text_cmp()
|
||||
* Comparison function for text strings.
|
||||
* Includes locale support, but must copy strings to temporary memory
|
||||
* to allow null-termination for inputs to strcoll().
|
||||
* XXX HACK code for textlen() indicates that there can be embedded nulls
|
||||
* but it appears that most routines (incl. this one) assume not! - tgl 97/04/07
|
||||
* Returns -1, 0 or 1
|
||||
*/
|
||||
bool
|
||||
text_lt(text *arg1, text *arg2)
|
||||
int
|
||||
text_cmp(text *arg1, text *arg2)
|
||||
{
|
||||
bool result;
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
int cval;
|
||||
|
||||
#endif
|
||||
int len;
|
||||
unsigned char *a1p,
|
||||
*a2p;
|
||||
unsigned char *a1p, *a2p;
|
||||
int len1, len2;
|
||||
|
||||
if (arg1 == NULL || arg2 == NULL)
|
||||
return ((bool) FALSE);
|
||||
|
||||
len = (((VARSIZE(arg1) <= VARSIZE(arg2)) ? VARSIZE(arg1) : VARSIZE(arg2)) - VARHDRSZ);
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
a1p = (unsigned char *) palloc(len + 1);
|
||||
a2p = (unsigned char *) palloc(len + 1);
|
||||
|
||||
memcpy(a1p, VARDATA(arg1), len);
|
||||
*(a1p + len) = '\0';
|
||||
memcpy(a2p, VARDATA(arg2), len);
|
||||
*(a2p + len) = '\0';
|
||||
|
||||
cval = strcoll(a1p, a2p);
|
||||
result = ((cval < 0) || ((cval == 0) && (VARSIZE(arg1) < VARSIZE(arg2))));
|
||||
|
||||
pfree(a1p);
|
||||
pfree(a2p);
|
||||
#else
|
||||
a1p = (unsigned char *) VARDATA(arg1);
|
||||
a2p = (unsigned char *) VARDATA(arg2);
|
||||
|
||||
while (len != 0 && *a1p == *a2p)
|
||||
{
|
||||
a1p++;
|
||||
a2p++;
|
||||
len--;
|
||||
};
|
||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||
|
||||
result = (len ? (*a1p < *a2p) : (VARSIZE(arg1) < VARSIZE(arg2)));
|
||||
#endif
|
||||
return varstr_cmp(a1p, len1, a2p, len2);
|
||||
} /* text_cmp() */
|
||||
|
||||
return (result);
|
||||
/* text_lt()
|
||||
* Comparison function for text strings.
|
||||
*/
|
||||
bool
|
||||
text_lt(text *arg1, text *arg2)
|
||||
{
|
||||
return (bool)(text_cmp(arg1, arg2) < 0);
|
||||
} /* text_lt() */
|
||||
|
||||
/* text_le()
|
||||
* Comparison function for text strings.
|
||||
* Includes locale support, but must copy strings to temporary memory
|
||||
* to allow null-termination for inputs to strcoll().
|
||||
* XXX HACK code for textlen() indicates that there can be embedded nulls
|
||||
* but it appears that most routines (incl. this one) assume not! - tgl 97/04/07
|
||||
*/
|
||||
bool
|
||||
text_le(text *arg1, text *arg2)
|
||||
{
|
||||
bool result;
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
int cval;
|
||||
|
||||
#endif
|
||||
int len;
|
||||
unsigned char *a1p,
|
||||
*a2p;
|
||||
|
||||
if (arg1 == NULL || arg2 == NULL)
|
||||
return ((bool) 0);
|
||||
|
||||
len = (((VARSIZE(arg1) <= VARSIZE(arg2)) ? VARSIZE(arg1) : VARSIZE(arg2)) - VARHDRSZ);
|
||||
|
||||
#ifdef USE_LOCALE
|
||||
a1p = (unsigned char *) palloc(len + 1);
|
||||
a2p = (unsigned char *) palloc(len + 1);
|
||||
|
||||
memcpy(a1p, VARDATA(arg1), len);
|
||||
*(a1p + len) = '\0';
|
||||
memcpy(a2p, VARDATA(arg2), len);
|
||||
*(a2p + len) = '\0';
|
||||
|
||||
cval = strcoll(a1p, a2p);
|
||||
result = ((cval < 0) || ((cval == 0) && (VARSIZE(arg1) <= VARSIZE(arg2))));
|
||||
|
||||
pfree(a1p);
|
||||
pfree(a2p);
|
||||
#else
|
||||
a1p = (unsigned char *) VARDATA(arg1);
|
||||
a2p = (unsigned char *) VARDATA(arg2);
|
||||
|
||||
while (len != 0 && *a1p == *a2p)
|
||||
{
|
||||
a1p++;
|
||||
a2p++;
|
||||
len--;
|
||||
};
|
||||
|
||||
result = (len ? (*a1p <= *a2p) : (VARSIZE(arg1) <= VARSIZE(arg2)));
|
||||
#endif
|
||||
|
||||
return (result);
|
||||
return (bool)(text_cmp(arg1, arg2) <= 0);
|
||||
} /* text_le() */
|
||||
|
||||
bool
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: builtins.h,v 1.43 1998/05/29 13:37:29 thomas Exp $
|
||||
* $Id: builtins.h,v 1.44 1998/06/16 06:41:51 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* This should normally only be included by fmgr.h.
|
||||
@ -428,6 +428,8 @@ extern char *textout(text *vlena);
|
||||
extern text *textcat(text *arg1, text *arg2);
|
||||
extern bool texteq(text *arg1, text *arg2);
|
||||
extern bool textne(text *arg1, text *arg2);
|
||||
extern int varstr_cmp(unsigned char *arg1, int len1, unsigned char *arg2, int len2);
|
||||
extern int text_cmp(text *arg1, text *arg2);
|
||||
extern bool text_lt(text *arg1, text *arg2);
|
||||
extern bool text_le(text *arg1, text *arg2);
|
||||
extern bool text_gt(text *arg1, text *arg2);
|
||||
|
33
src/test/locale/Makefile
Normal file
33
src/test/locale/Makefile
Normal file
@ -0,0 +1,33 @@
|
||||
#
|
||||
# Makefile for example programs
|
||||
#
|
||||
|
||||
SRCDIR= ../..
|
||||
include ../../Makefile.global
|
||||
|
||||
#
|
||||
# And where libpq goes, so goes the authentication stuff...
|
||||
#
|
||||
ifdef KRBVERS
|
||||
LDFLAGS+= $(KRBLIBS)
|
||||
CFLAGS+= $(KRBFLAGS)
|
||||
endif
|
||||
|
||||
PROGS = test-pgsql-locale test-ctype
|
||||
DIRS = koi8-r
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
$(PROGS): % : %.c
|
||||
$(CC) $(CFLAGS) -o $@ $@.c $(LDFLAGS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROGS) *.out
|
||||
for d in $(DIRS); do \
|
||||
cd $$d; \
|
||||
$(MAKE) clean; \
|
||||
cd ..; \
|
||||
done
|
||||
|
||||
test-%: all
|
||||
@cd `echo $@ | sed s/^test-//` && $(MAKE) test
|
27
src/test/locale/README
Normal file
27
src/test/locale/README
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
1998 May 25
|
||||
|
||||
This directory contains a set of tests for locales. I provided one C
|
||||
program test-ctype.c to test CTYPE support in libc and installed
|
||||
localedata. Then there are test-sort.pl and test-sort.py that tests
|
||||
collating. (Also there is test-sort.py but it is commented out in scripts;
|
||||
uncomment it if you have Python interpreter installed).
|
||||
To run a test for some locale (koi8, e.g) run
|
||||
make all test-$locale
|
||||
(for example)
|
||||
make all test-koi8
|
||||
|
||||
Currently, only tests for koi8 locale (russian cyrillic for UN*X)
|
||||
provided in koi8 directory. Script `runall' calls test-pgsql-locale to test
|
||||
whether locale support had been compiled into PotgreSQL, test-ctype to test
|
||||
libc and localedata, test-sort.pl (uncomment test-sort.py, if you have
|
||||
Python interpreter installed) and does tests on PostgreSQL with
|
||||
test-koi8*.sql.in.
|
||||
|
||||
To add locale tests one need to create directory $locale and create
|
||||
Makefile (and other files) similar to koi8-r/*. Actually, the simplest (I
|
||||
think) method is just copy koi8-r directory and edit/replace files.
|
||||
|
||||
Oleg.
|
||||
----
|
||||
Oleg Broytmann http://members.tripod.com/~phd2/ phd2@earthling.net
|
12
src/test/locale/koi8-r/Makefile
Normal file
12
src/test/locale/koi8-r/Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
#
|
||||
# Makefile for example programs
|
||||
#
|
||||
|
||||
all:
|
||||
-@echo "make: Nothing to be done for \`all'."
|
||||
|
||||
test:
|
||||
@./runall
|
||||
|
||||
clean:
|
||||
rm -f *.out
|
257
src/test/locale/koi8-r/expected/koi8-ctype.out
Normal file
257
src/test/locale/koi8-r/expected/koi8-ctype.out
Normal file
@ -0,0 +1,257 @@
|
||||
char# char alnum alpha cntrl digit lower graph print punct space upper xdigit lo up
|
||||
chr#0 +
|
||||
chr#1 +
|
||||
chr#2 +
|
||||
chr#3 +
|
||||
chr#4 +
|
||||
chr#5 +
|
||||
chr#6 +
|
||||
chr#7 +
|
||||
chr#8 +
|
||||
chr#9 + +
|
||||
chr#10 + +
|
||||
chr#11 + +
|
||||
chr#12 + +
|
||||
chr#13 + +
|
||||
chr#14 +
|
||||
chr#15 +
|
||||
chr#16 +
|
||||
chr#17 +
|
||||
chr#18 +
|
||||
chr#19 +
|
||||
chr#20 +
|
||||
chr#21 +
|
||||
chr#22 +
|
||||
chr#23 +
|
||||
chr#24 +
|
||||
chr#25 +
|
||||
chr#26 +
|
||||
chr#27 +
|
||||
chr#28 +
|
||||
chr#29 +
|
||||
chr#30 +
|
||||
chr#31 +
|
||||
chr#32 + +
|
||||
chr#33 ! + + + ! !
|
||||
chr#34 " + + + " "
|
||||
chr#35 # + + + # #
|
||||
chr#36 $ + + + $ $
|
||||
chr#37 % + + + % %
|
||||
chr#38 & + + + & &
|
||||
chr#39 ' + + + ' '
|
||||
chr#40 ( + + + ( (
|
||||
chr#41 ) + + + ) )
|
||||
chr#42 * + + + * *
|
||||
chr#43 + + + + + +
|
||||
chr#44 , + + + , ,
|
||||
chr#45 - + + + - -
|
||||
chr#46 . + + + . .
|
||||
chr#47 / + + + / /
|
||||
chr#48 0 + + + + + 0 0
|
||||
chr#49 1 + + + + + 1 1
|
||||
chr#50 2 + + + + + 2 2
|
||||
chr#51 3 + + + + + 3 3
|
||||
chr#52 4 + + + + + 4 4
|
||||
chr#53 5 + + + + + 5 5
|
||||
chr#54 6 + + + + + 6 6
|
||||
chr#55 7 + + + + + 7 7
|
||||
chr#56 8 + + + + + 8 8
|
||||
chr#57 9 + + + + + 9 9
|
||||
chr#58 : + + + : :
|
||||
chr#59 ; + + + ; ;
|
||||
chr#60 < + + + < <
|
||||
chr#61 = + + + = =
|
||||
chr#62 > + + + > >
|
||||
chr#63 ? + + + ? ?
|
||||
chr#64 @ + + + @ @
|
||||
chr#65 A + + + + + + a A
|
||||
chr#66 B + + + + + + b B
|
||||
chr#67 C + + + + + + c C
|
||||
chr#68 D + + + + + + d D
|
||||
chr#69 E + + + + + + e E
|
||||
chr#70 F + + + + + + f F
|
||||
chr#71 G + + + + + g G
|
||||
chr#72 H + + + + + h H
|
||||
chr#73 I + + + + + i I
|
||||
chr#74 J + + + + + j J
|
||||
chr#75 K + + + + + k K
|
||||
chr#76 L + + + + + l L
|
||||
chr#77 M + + + + + m M
|
||||
chr#78 N + + + + + n N
|
||||
chr#79 O + + + + + o O
|
||||
chr#80 P + + + + + p P
|
||||
chr#81 Q + + + + + q Q
|
||||
chr#82 R + + + + + r R
|
||||
chr#83 S + + + + + s S
|
||||
chr#84 T + + + + + t T
|
||||
chr#85 U + + + + + u U
|
||||
chr#86 V + + + + + v V
|
||||
chr#87 W + + + + + w W
|
||||
chr#88 X + + + + + x X
|
||||
chr#89 Y + + + + + y Y
|
||||
chr#90 Z + + + + + z Z
|
||||
chr#91 [ + + + [ [
|
||||
chr#92 \ + + + \ \
|
||||
chr#93 ] + + + ] ]
|
||||
chr#94 ^ + + + ^ ^
|
||||
chr#95 _ + + + _ _
|
||||
chr#96 ` + + + ` `
|
||||
chr#97 a + + + + + + a A
|
||||
chr#98 b + + + + + + b B
|
||||
chr#99 c + + + + + + c C
|
||||
chr#100 d + + + + + + d D
|
||||
chr#101 e + + + + + + e E
|
||||
chr#102 f + + + + + + f F
|
||||
chr#103 g + + + + + g G
|
||||
chr#104 h + + + + + h H
|
||||
chr#105 i + + + + + i I
|
||||
chr#106 j + + + + + j J
|
||||
chr#107 k + + + + + k K
|
||||
chr#108 l + + + + + l L
|
||||
chr#109 m + + + + + m M
|
||||
chr#110 n + + + + + n N
|
||||
chr#111 o + + + + + o O
|
||||
chr#112 p + + + + + p P
|
||||
chr#113 q + + + + + q Q
|
||||
chr#114 r + + + + + r R
|
||||
chr#115 s + + + + + s S
|
||||
chr#116 t + + + + + t T
|
||||
chr#117 u + + + + + u U
|
||||
chr#118 v + + + + + v V
|
||||
chr#119 w + + + + + w W
|
||||
chr#120 x + + + + + x X
|
||||
chr#121 y + + + + + y Y
|
||||
chr#122 z + + + + + z Z
|
||||
chr#123 { + + + { {
|
||||
chr#124 | + + + | |
|
||||
chr#125 } + + + } }
|
||||
chr#126 ~ + + + ~ ~
|
||||
chr#127 +
|
||||
chr#128 € + + + € €
|
||||
chr#129 <20> + + + <20> <20>
|
||||
chr#130 ‚ + + + ‚ ‚
|
||||
chr#131 ƒ + + + ƒ ƒ
|
||||
chr#132 „ + + + „ „
|
||||
chr#133 … + + + … …
|
||||
chr#134 † + + + † †
|
||||
chr#135 ‡ + + + ‡ ‡
|
||||
chr#136 ˆ + + + ˆ ˆ
|
||||
chr#137 ‰ + + + ‰ ‰
|
||||
chr#138 Š + + + Š Š
|
||||
chr#139 ‹ + + + ‹ ‹
|
||||
chr#140 Œ + + + Œ Œ
|
||||
chr#141 <20> + + + <20> <20>
|
||||
chr#142 Ž + + + Ž Ž
|
||||
chr#143 <20> + + + <20> <20>
|
||||
chr#144 <20> + + + <20> <20>
|
||||
chr#145 ‘ + + + ‘ ‘
|
||||
chr#146 ’ + + + ’ ’
|
||||
chr#147 “ + + + “ “
|
||||
chr#148 ” + + + ” ”
|
||||
chr#149 • + + + • •
|
||||
chr#150 – + + + – –
|
||||
chr#151 — + + + — —
|
||||
chr#152 ˜ + + + ˜ ˜
|
||||
chr#153 ™ + + + ™ ™
|
||||
chr#154 +
|
||||
chr#155 › + + + › ›
|
||||
chr#156 œ + + + œ œ
|
||||
chr#157 <20> + + + <20> <20>
|
||||
chr#158 ž + + + ž ž
|
||||
chr#159 Ÿ + + + Ÿ Ÿ
|
||||
chr#160 + + +
|
||||
chr#161 ¡ + + + ¡ ¡
|
||||
chr#162 ¢ + + + ¢ ¢
|
||||
chr#163 £ + + + + + £ ³
|
||||
chr#164 ¤ + + + ¤ ¤
|
||||
chr#165 ¥ + + + ¥ ¥
|
||||
chr#166 ¦ + + + ¦ ¦
|
||||
chr#167 § + + + § §
|
||||
chr#168 ¨ + + + ¨ ¨
|
||||
chr#169 © + + + © ©
|
||||
chr#170 ª + + + ª ª
|
||||
chr#171 « + + + « «
|
||||
chr#172 ¬ + + + ¬ ¬
|
||||
chr#173 + + +
|
||||
chr#174 ® + + + ® ®
|
||||
chr#175 ¯ + + + ¯ ¯
|
||||
chr#176 ° + + + ° °
|
||||
chr#177 ± + + + ± ±
|
||||
chr#178 ² + + + ² ²
|
||||
chr#179 ³ + + + + + £ ³
|
||||
chr#180 ´ + + + ´ ´
|
||||
chr#181 µ + + + µ µ
|
||||
chr#182 ¶ + + + ¶ ¶
|
||||
chr#183 · + + + · ·
|
||||
chr#184 ¸ + + + ¸ ¸
|
||||
chr#185 ¹ + + + ¹ ¹
|
||||
chr#186 º + + + º º
|
||||
chr#187 » + + + » »
|
||||
chr#188 ¼ + + + ¼ ¼
|
||||
chr#189 ½ + + + ½ ½
|
||||
chr#190 ¾ + + + ¾ ¾
|
||||
chr#191 ¿ + + + ¿ ¿
|
||||
chr#192 À + + + + + À à
|
||||
chr#193 Á + + + + + Á á
|
||||
chr#194 Â + + + + + Â â
|
||||
chr#195 Ã + + + + + Ã ã
|
||||
chr#196 Ä + + + + + Ä ä
|
||||
chr#197 Å + + + + + Å å
|
||||
chr#198 Æ + + + + + Æ æ
|
||||
chr#199 Ç + + + + + Ç ç
|
||||
chr#200 È + + + + + È è
|
||||
chr#201 É + + + + + É é
|
||||
chr#202 Ê + + + + + Ê ê
|
||||
chr#203 Ë + + + + + Ë ë
|
||||
chr#204 Ì + + + + + Ì ì
|
||||
chr#205 Í + + + + + Í í
|
||||
chr#206 Î + + + + + Î î
|
||||
chr#207 Ï + + + + + Ï ï
|
||||
chr#208 Ð + + + + + Ð ð
|
||||
chr#209 Ñ + + + + + Ñ ñ
|
||||
chr#210 Ò + + + + + Ò ò
|
||||
chr#211 Ó + + + + + Ó ó
|
||||
chr#212 Ô + + + + + Ô ô
|
||||
chr#213 Õ + + + + + Õ õ
|
||||
chr#214 Ö + + + + + Ö ö
|
||||
chr#215 × + + + + + × ÷
|
||||
chr#216 Ø + + + + + Ø ø
|
||||
chr#217 Ù + + + + + Ù ù
|
||||
chr#218 Ú + + + + + Ú ú
|
||||
chr#219 Û + + + + + Û û
|
||||
chr#220 Ü + + + + + Ü ü
|
||||
chr#221 Ý + + + + + Ý ý
|
||||
chr#222 Þ + + + + + Þ þ
|
||||
chr#223 ß + + + + + ß
|
||||
chr#224 à + + + + + À à
|
||||
chr#225 á + + + + + Á á
|
||||
chr#226 â + + + + + Â â
|
||||
chr#227 ã + + + + + Ã ã
|
||||
chr#228 ä + + + + + Ä ä
|
||||
chr#229 å + + + + + Å å
|
||||
chr#230 æ + + + + + Æ æ
|
||||
chr#231 ç + + + + + Ç ç
|
||||
chr#232 è + + + + + È è
|
||||
chr#233 é + + + + + É é
|
||||
chr#234 ê + + + + + Ê ê
|
||||
chr#235 ë + + + + + Ë ë
|
||||
chr#236 ì + + + + + Ì ì
|
||||
chr#237 í + + + + + Í í
|
||||
chr#238 î + + + + + Î î
|
||||
chr#239 ï + + + + + Ï ï
|
||||
chr#240 ð + + + + + Ð ð
|
||||
chr#241 ñ + + + + + Ñ ñ
|
||||
chr#242 ò + + + + + Ò ò
|
||||
chr#243 ó + + + + + Ó ó
|
||||
chr#244 ô + + + + + Ô ô
|
||||
chr#245 õ + + + + + Õ õ
|
||||
chr#246 ö + + + + + Ö ö
|
||||
chr#247 ÷ + + + + + × ÷
|
||||
chr#248 ø + + + + + Ø ø
|
||||
chr#249 ù + + + + + Ù ù
|
||||
chr#250 ú + + + + + Ú ú
|
||||
chr#251 û + + + + + Û û
|
||||
chr#252 ü + + + + + Ü ü
|
||||
chr#253 ý + + + + + Ý ý
|
||||
chr#254 þ + + + + + Þ þ
|
||||
chr#255 + + + + + ß
|
55
src/test/locale/koi8-r/expected/test-koi8-char.sql.out
Normal file
55
src/test/locale/koi8-r/expected/test-koi8-char.sql.out
Normal file
@ -0,0 +1,55 @@
|
||||
abbrev|name_en |name_ru
|
||||
------+--------------------+------------------------------------------------------------
|
||||
ID |Idaho |áÊÄÁÈÏ
|
||||
IA |Iowa |áÊÏ×Á
|
||||
AL |Alabama |áÌÁÂÁÍÁ
|
||||
AK |Alaska |áÌÑÓËÁ
|
||||
AZ |Arizona |áÒÉÚÏÎÁ
|
||||
AR |Arkansas |áÒËÁÎÚÁÓ
|
||||
WY |Wyoming |÷ÁÊÏÍÉÎÇ
|
||||
WA |Washington |÷ÁÛÉÎÇÔÏÎ
|
||||
VT |Vermont |÷ÅÒÍÏÎÔ
|
||||
VA |Virginia |փ񀅃냄
|
||||
WI |Wisconsin |÷ÉÓËÏÎÓÉÎ
|
||||
DE |Delaware |äÅÌÁ×ÜÒ
|
||||
GA |Georgia |äÖÏÒÄÖÉÑ
|
||||
WV |West Virginia |úÁÐÁÄÎÁÑ ÷ÉÒÄÖÉÎÉÑ
|
||||
IL |Illinois |éÌÌÉÎÏÊÓ
|
||||
IN |Indiana |éÎÄÉÁÎÁ
|
||||
CA |California |ëÁÌÉÆÏÒÎÉÑ
|
||||
KA |Kansas |ëÁÎÚÁÓ
|
||||
KY |Kentucky |ëÅÎÔÕËËÉ
|
||||
CO |Colorado |ëÏÌÏÒÁÄÏ
|
||||
CT |Connecticut |ëÏÎÎÅËÔÉËÕÔ
|
||||
LA |Louisiana |ìÕÉÚÉÁÎÁ
|
||||
MA |Massachusetts |íÁÓÓÁÞÕÓÅÔÓ
|
||||
MN |Minnesota |íÉÎÎÅÓÏÔÁ
|
||||
MS |Mississippi |íÉÓÓÉÓÉÐÉ
|
||||
MO |Missouri |íÉÓÓÕÒÉ
|
||||
MI |Michigan |íÉÞÉÇÁÎ
|
||||
MT |Montana |íÏÎÔÁÎÁ
|
||||
ME |Maine |íÜÎ
|
||||
MD |Maryland |íÜÒÉÌÅÎÄ
|
||||
NE |Nebraska |îÅÂÒÁÓËÁ
|
||||
NV |Nevada |îÅ×ÁÄÁ
|
||||
NH |New Hampshire |îØÀ-çÜÍÐÛÉÒ
|
||||
NJ |New Jersey |îØÀ-äÖÅÒÓÉ
|
||||
NY |New York |îØÀ-êÏÒË
|
||||
NM |New Mexico |îØÀ-íÅËÓÉËÏ
|
||||
OH |Ohio |ïÇÁÊÏ
|
||||
OK |Oklahoma |ïËÌÁÈÏÍÁ
|
||||
DC |Washington DC |ÏËÒÕÇ ëÏÌÕÍÂÉÑ (ÓÏÚÄÁÎ ÓÐÅÃÉÁÌØÎÏ ÐÏÄ ÓÔÏÌÉÃÕ)
|
||||
OR |Oregon |ïÒÅÇÏÎ
|
||||
PA |Pennsylvania |ðÅÎÓÉÌØ×ÁÎÉÑ
|
||||
RI |Rhode Island |òÏÄ-áÊÌÅÎÄ
|
||||
ND |North Dakota |óÅ×ÅÒÎÁÑ äÁËÏÔÁ
|
||||
NC |North Carolina |óÅ×ÅÒÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
TN |Tennessee |ôÅÎÎÅÓÓÉ
|
||||
TX |Texas |ôÅÈÁÓ
|
||||
FL |Florida |æÌÏÒÉÄÁ
|
||||
SD |South Dakota |àÖÎÁÑ äÁËÏÔÁ
|
||||
SC |South Carolina |àÖÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
UT |Utah |àÔÁ
|
||||
(50 rows)
|
||||
|
||||
EOF
|
9
src/test/locale/koi8-r/expected/test-koi8-select.sql.out
Normal file
9
src/test/locale/koi8-r/expected/test-koi8-select.sql.out
Normal file
@ -0,0 +1,9 @@
|
||||
abbrev|name_en |name_ru
|
||||
------+--------------------+----------------------------------------------
|
||||
OH |Ohio |Огайо
|
||||
OK |Oklahoma |Оклахома
|
||||
DC |Washington DC |округ Колумбия (создан специально под столицу)
|
||||
OR |Oregon |Орегон
|
||||
(4 rows)
|
||||
|
||||
EOF
|
9
src/test/locale/koi8-r/expected/test-koi8-sort.out
Normal file
9
src/test/locale/koi8-r/expected/test-koi8-sort.out
Normal file
@ -0,0 +1,9 @@
|
||||
Bording
|
||||
hoarding
|
||||
Vesta
|
||||
vesta
|
||||
ÁÌØÑÎÓ
|
||||
áÆÒÉËÁ
|
||||
óÅ×ÅÒ
|
||||
ãÁÐÌÑ
|
||||
àÇ
|
55
src/test/locale/koi8-r/expected/test-koi8-text.sql.out
Normal file
55
src/test/locale/koi8-r/expected/test-koi8-text.sql.out
Normal file
@ -0,0 +1,55 @@
|
||||
abbrev|name_en |name_ru
|
||||
------+--------------------+----------------------------------------------
|
||||
ID |Idaho |áÊÄÁÈÏ
|
||||
IA |Iowa |áÊÏ×Á
|
||||
AL |Alabama |áÌÁÂÁÍÁ
|
||||
AK |Alaska |áÌÑÓËÁ
|
||||
AZ |Arizona |áÒÉÚÏÎÁ
|
||||
AR |Arkansas |áÒËÁÎÚÁÓ
|
||||
WY |Wyoming |÷ÁÊÏÍÉÎÇ
|
||||
WA |Washington |÷ÁÛÉÎÇÔÏÎ
|
||||
VT |Vermont |÷ÅÒÍÏÎÔ
|
||||
VA |Virginia |փ񀅃냄
|
||||
WI |Wisconsin |÷ÉÓËÏÎÓÉÎ
|
||||
DE |Delaware |äÅÌÁ×ÜÒ
|
||||
GA |Georgia |äÖÏÒÄÖÉÑ
|
||||
WV |West Virginia |úÁÐÁÄÎÁÑ ÷ÉÒÄÖÉÎÉÑ
|
||||
IL |Illinois |éÌÌÉÎÏÊÓ
|
||||
IN |Indiana |éÎÄÉÁÎÁ
|
||||
CA |California |ëÁÌÉÆÏÒÎÉÑ
|
||||
KA |Kansas |ëÁÎÚÁÓ
|
||||
KY |Kentucky |ëÅÎÔÕËËÉ
|
||||
CO |Colorado |ëÏÌÏÒÁÄÏ
|
||||
CT |Connecticut |ëÏÎÎÅËÔÉËÕÔ
|
||||
LA |Louisiana |ìÕÉÚÉÁÎÁ
|
||||
MA |Massachusetts |íÁÓÓÁÞÕÓÅÔÓ
|
||||
MN |Minnesota |íÉÎÎÅÓÏÔÁ
|
||||
MS |Mississippi |íÉÓÓÉÓÉÐÉ
|
||||
MO |Missouri |íÉÓÓÕÒÉ
|
||||
MI |Michigan |íÉÞÉÇÁÎ
|
||||
MT |Montana |íÏÎÔÁÎÁ
|
||||
ME |Maine |íÜÎ
|
||||
MD |Maryland |íÜÒÉÌÅÎÄ
|
||||
NE |Nebraska |îÅÂÒÁÓËÁ
|
||||
NV |Nevada |îÅ×ÁÄÁ
|
||||
NH |New Hampshire |îØÀ-çÜÍÐÛÉÒ
|
||||
NJ |New Jersey |îØÀ-äÖÅÒÓÉ
|
||||
NY |New York |îØÀ-êÏÒË
|
||||
NM |New Mexico |îØÀ-íÅËÓÉËÏ
|
||||
OH |Ohio |ïÇÁÊÏ
|
||||
OK |Oklahoma |ïËÌÁÈÏÍÁ
|
||||
DC |Washington DC |ÏËÒÕÇ ëÏÌÕÍÂÉÑ (ÓÏÚÄÁÎ ÓÐÅÃÉÁÌØÎÏ ÐÏÄ ÓÔÏÌÉÃÕ)
|
||||
OR |Oregon |ïÒÅÇÏÎ
|
||||
PA |Pennsylvania |ðÅÎÓÉÌØ×ÁÎÉÑ
|
||||
RI |Rhode Island |òÏÄ-áÊÌÅÎÄ
|
||||
ND |North Dakota |óÅ×ÅÒÎÁÑ äÁËÏÔÁ
|
||||
NC |North Carolina |óÅ×ÅÒÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
TN |Tennessee |ôÅÎÎÅÓÓÉ
|
||||
TX |Texas |ôÅÈÁÓ
|
||||
FL |Florida |æÌÏÒÉÄÁ
|
||||
SD |South Dakota |àÖÎÁÑ äÁËÏÔÁ
|
||||
SC |South Carolina |àÖÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
UT |Utah |àÔÁ
|
||||
(50 rows)
|
||||
|
||||
EOF
|
55
src/test/locale/koi8-r/expected/test-koi8-varchar.sql.out
Normal file
55
src/test/locale/koi8-r/expected/test-koi8-varchar.sql.out
Normal file
@ -0,0 +1,55 @@
|
||||
abbrev|name_en |name_ru
|
||||
------+--------------------+----------------------------------------------
|
||||
ID |Idaho |áÊÄÁÈÏ
|
||||
IA |Iowa |áÊÏ×Á
|
||||
AL |Alabama |áÌÁÂÁÍÁ
|
||||
AK |Alaska |áÌÑÓËÁ
|
||||
AZ |Arizona |áÒÉÚÏÎÁ
|
||||
AR |Arkansas |áÒËÁÎÚÁÓ
|
||||
WY |Wyoming |÷ÁÊÏÍÉÎÇ
|
||||
WA |Washington |÷ÁÛÉÎÇÔÏÎ
|
||||
VT |Vermont |÷ÅÒÍÏÎÔ
|
||||
VA |Virginia |փ񀅃냄
|
||||
WI |Wisconsin |÷ÉÓËÏÎÓÉÎ
|
||||
DE |Delaware |äÅÌÁ×ÜÒ
|
||||
GA |Georgia |äÖÏÒÄÖÉÑ
|
||||
WV |West Virginia |úÁÐÁÄÎÁÑ ÷ÉÒÄÖÉÎÉÑ
|
||||
IL |Illinois |éÌÌÉÎÏÊÓ
|
||||
IN |Indiana |éÎÄÉÁÎÁ
|
||||
CA |California |ëÁÌÉÆÏÒÎÉÑ
|
||||
KA |Kansas |ëÁÎÚÁÓ
|
||||
KY |Kentucky |ëÅÎÔÕËËÉ
|
||||
CO |Colorado |ëÏÌÏÒÁÄÏ
|
||||
CT |Connecticut |ëÏÎÎÅËÔÉËÕÔ
|
||||
LA |Louisiana |ìÕÉÚÉÁÎÁ
|
||||
MA |Massachusetts |íÁÓÓÁÞÕÓÅÔÓ
|
||||
MN |Minnesota |íÉÎÎÅÓÏÔÁ
|
||||
MS |Mississippi |íÉÓÓÉÓÉÐÉ
|
||||
MO |Missouri |íÉÓÓÕÒÉ
|
||||
MI |Michigan |íÉÞÉÇÁÎ
|
||||
MT |Montana |íÏÎÔÁÎÁ
|
||||
ME |Maine |íÜÎ
|
||||
MD |Maryland |íÜÒÉÌÅÎÄ
|
||||
NE |Nebraska |îÅÂÒÁÓËÁ
|
||||
NV |Nevada |îÅ×ÁÄÁ
|
||||
NH |New Hampshire |îØÀ-çÜÍÐÛÉÒ
|
||||
NJ |New Jersey |îØÀ-äÖÅÒÓÉ
|
||||
NY |New York |îØÀ-êÏÒË
|
||||
NM |New Mexico |îØÀ-íÅËÓÉËÏ
|
||||
OH |Ohio |ïÇÁÊÏ
|
||||
OK |Oklahoma |ïËÌÁÈÏÍÁ
|
||||
DC |Washington DC |ÏËÒÕÇ ëÏÌÕÍÂÉÑ (ÓÏÚÄÁÎ ÓÐÅÃÉÁÌØÎÏ ÐÏÄ ÓÔÏÌÉÃÕ)
|
||||
OR |Oregon |ïÒÅÇÏÎ
|
||||
PA |Pennsylvania |ðÅÎÓÉÌØ×ÁÎÉÑ
|
||||
RI |Rhode Island |òÏÄ-áÊÌÅÎÄ
|
||||
ND |North Dakota |óÅ×ÅÒÎÁÑ äÁËÏÔÁ
|
||||
NC |North Carolina |óÅ×ÅÒÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
TN |Tennessee |ôÅÎÎÅÓÓÉ
|
||||
TX |Texas |ôÅÈÁÓ
|
||||
FL |Florida |æÌÏÒÉÄÁ
|
||||
SD |South Dakota |àÖÎÁÑ äÁËÏÔÁ
|
||||
SC |South Carolina |àÖÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
UT |Utah |àÔÁ
|
||||
(50 rows)
|
||||
|
||||
EOF
|
52
src/test/locale/koi8-r/runall
Executable file
52
src/test/locale/koi8-r/runall
Executable file
@ -0,0 +1,52 @@
|
||||
#! /bin/sh
|
||||
|
||||
PATH=..:$PATH
|
||||
|
||||
echo "Testing PostgreSQL compilation..."
|
||||
if ! test-pgsql-locale; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LC_CTYPE=ru_RU.KOI8-R
|
||||
LC_COLLATE=$LC_CTYPE
|
||||
export LC_CTYPE LC_COLLATE
|
||||
|
||||
echo "Testing LC_CTYPE..."
|
||||
if ! test-ctype > koi8-ctype.out; then
|
||||
exit 1
|
||||
fi
|
||||
diff expected/koi8-ctype.out koi8-ctype.out
|
||||
|
||||
echo "Testing LC_COLLATE..."
|
||||
perl ../sort-test.pl test-koi8-sort.in > test-koi8-sort.out
|
||||
diff expected/test-koi8-sort.out test-koi8-sort.out
|
||||
|
||||
### If you have Python - uncomment the following two lines
|
||||
#python ../sort-test.py test-koi8-sort.in > test-koi8-sort.out
|
||||
#diff expected/test-koi8-sort.out test-koi8-sort.out
|
||||
|
||||
|
||||
abort() {
|
||||
[ "$1" ] && echo "$*"
|
||||
exit 1
|
||||
}
|
||||
|
||||
for f in char varchar text; do
|
||||
if echo $f | grep -q char; then
|
||||
ftype="$f(60)"
|
||||
else
|
||||
ftype="$f"
|
||||
fi
|
||||
echo "Testing PgSQL: sort on $ftype type..."
|
||||
|
||||
destroydb testlocale >/dev/null 2>&1
|
||||
createdb testlocale || abort "createdb failed"
|
||||
psql -d testlocale -c "CREATE TABLE usastates (abbrev char2, name_en char(20), name_ru $ftype);" >/dev/null 2>&1 || abort "createtable failed"
|
||||
psql testlocale < test-koi8.sql.in > test-koi8-$f.sql.out 2>/dev/null || abort "test query failed"
|
||||
diff expected/test-koi8-$f.sql.out test-koi8-$f.sql.out
|
||||
done
|
||||
echo "Testing PgSQL: select on regexp..."
|
||||
psql testlocale < test-koi8-select.sql.in > test-koi8-select.sql.out 2>/dev/null || abort "select query failed"
|
||||
diff expected/test-koi8-select.sql.out test-koi8-select.sql.out
|
||||
destroydb testlocale || abort "destroydb failed"
|
||||
echo "Finished."
|
1
src/test/locale/koi8-r/test-koi8-select.sql.in
Normal file
1
src/test/locale/koi8-r/test-koi8-select.sql.in
Normal file
@ -0,0 +1 @@
|
||||
SELECT * FROM usastates WHERE name_ru ~* '^Ï.*' ORDER BY name_ru;
|
9
src/test/locale/koi8-r/test-koi8-sort.in
Normal file
9
src/test/locale/koi8-r/test-koi8-sort.in
Normal file
@ -0,0 +1,9 @@
|
||||
Vesta
|
||||
vesta
|
||||
àÇ
|
||||
ÁÌØÑÎÓ
|
||||
áÆÒÉËÁ
|
||||
óÅ×ÅÒ
|
||||
ãÁÐÌÑ
|
||||
Bording
|
||||
hoarding
|
53
src/test/locale/koi8-r/test-koi8.sql.in
Normal file
53
src/test/locale/koi8-r/test-koi8.sql.in
Normal file
@ -0,0 +1,53 @@
|
||||
COPY usastates FROM stdin USING DELIMITERS '|';
|
||||
AK|Alaska |áÌÑÓËÁ
|
||||
WA|Washington |÷ÁÛÉÎÇÔÏÎ
|
||||
OR|Oregon |ïÒÅÇÏÎ
|
||||
CA|California |ëÁÌÉÆÏÒÎÉÑ
|
||||
NV|Nevada |îÅ×ÁÄÁ
|
||||
ID|Idaho |áÊÄÁÈÏ
|
||||
UT|Utah |àÔÁ
|
||||
AZ|Arizona |áÒÉÚÏÎÁ
|
||||
MT|Montana |íÏÎÔÁÎÁ
|
||||
WY|Wyoming |÷ÁÊÏÍÉÎÇ
|
||||
CO|Colorado |ëÏÌÏÒÁÄÏ
|
||||
NM|New Mexico |îØÀ-íÅËÓÉËÏ
|
||||
ND|North Dakota |óÅ×ÅÒÎÁÑ äÁËÏÔÁ
|
||||
SD|South Dakota |àÖÎÁÑ äÁËÏÔÁ
|
||||
NE|Nebraska |îÅÂÒÁÓËÁ
|
||||
KA|Kansas |ëÁÎÚÁÓ
|
||||
OK|Oklahoma |ïËÌÁÈÏÍÁ
|
||||
TX|Texas |ôÅÈÁÓ
|
||||
MN|Minnesota |íÉÎÎÅÓÏÔÁ
|
||||
IA|Iowa |áÊÏ×Á
|
||||
MO|Missouri |íÉÓÓÕÒÉ
|
||||
AR|Arkansas |áÒËÁÎÚÁÓ
|
||||
LA|Louisiana |ìÕÉÚÉÁÎÁ
|
||||
WI|Wisconsin |÷ÉÓËÏÎÓÉÎ
|
||||
IL|Illinois |éÌÌÉÎÏÊÓ
|
||||
IN|Indiana |éÎÄÉÁÎÁ
|
||||
MS|Mississippi |íÉÓÓÉÓÉÐÉ
|
||||
AL|Alabama |áÌÁÂÁÍÁ
|
||||
MI|Michigan |íÉÞÉÇÁÎ
|
||||
OH|Ohio |ïÇÁÊÏ
|
||||
KY|Kentucky |ëÅÎÔÕËËÉ
|
||||
TN|Tennessee |ôÅÎÎÅÓÓÉ
|
||||
GA|Georgia |äÖÏÒÄÖÉÑ
|
||||
FL|Florida |æÌÏÒÉÄÁ
|
||||
PA|Pennsylvania |ðÅÎÓÉÌØ×ÁÎÉÑ
|
||||
WV|West Virginia |úÁÐÁÄÎÁÑ ÷ÉÒÄÖÉÎÉÑ
|
||||
VA|Virginia |փ񀅃냄
|
||||
NC|North Carolina|óÅ×ÅÒÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
SC|South Carolina|àÖÎÁÑ ëÁÒÏÌÉÎÁ
|
||||
NY|New York |îØÀ-êÏÒË
|
||||
NJ|New Jersey |îØÀ-äÖÅÒÓÉ
|
||||
DE|Delaware |äÅÌÁ×ÜÒ
|
||||
MD|Maryland |íÜÒÉÌÅÎÄ
|
||||
DC|Washington DC |ÏËÒÕÇ ëÏÌÕÍÂÉÑ (ÓÏÚÄÁÎ ÓÐÅÃÉÁÌØÎÏ ÐÏÄ ÓÔÏÌÉÃÕ)
|
||||
VT|Vermont |÷ÅÒÍÏÎÔ
|
||||
MA|Massachusetts |íÁÓÓÁÞÕÓÅÔÓ
|
||||
CT|Connecticut |ëÏÎÎÅËÔÉËÕÔ
|
||||
ME|Maine |íÜÎ
|
||||
NH|New Hampshire |îØÀ-çÜÍÐÛÉÒ
|
||||
RI|Rhode Island |òÏÄ-áÊÌÅÎÄ
|
||||
\.
|
||||
SELECT * FROM usastates ORDER BY name_ru;
|
12
src/test/locale/sort-test.pl
Executable file
12
src/test/locale/sort-test.pl
Executable file
@ -0,0 +1,12 @@
|
||||
#!/usr/local/bin/perl -w
|
||||
use locale;
|
||||
|
||||
open(INFILE, "<$ARGV[0]");
|
||||
chop(my(@words) = <INFILE>);
|
||||
close(INFILE);
|
||||
|
||||
$"="\n";
|
||||
my(@result) = sort @words;
|
||||
|
||||
print "@result\n";
|
||||
|
18
src/test/locale/sort-test.py
Executable file
18
src/test/locale/sort-test.py
Executable file
@ -0,0 +1,18 @@
|
||||
#! /usr/local/bin/python
|
||||
|
||||
import sys, string, locale
|
||||
locale.setlocale(locale.LC_ALL, "")
|
||||
|
||||
if len(sys.argv) <> 2:
|
||||
sys.stderr.write("Usage: sort.py filename\n")
|
||||
sys.exit(1)
|
||||
|
||||
infile = open(sys.argv[1], 'r')
|
||||
list = infile.readlines()
|
||||
infile.close()
|
||||
|
||||
for i in range(0, len(list)):
|
||||
list[i] = list[i][:-1] # chop!
|
||||
|
||||
list.sort(locale.strcoll)
|
||||
print string.join(list, '\n')
|
65
src/test/locale/test-ctype.c
Normal file
65
src/test/locale/test-ctype.c
Normal file
@ -0,0 +1,65 @@
|
||||
|
||||
/*
|
||||
|
||||
test-ctype.c
|
||||
|
||||
Written by Oleg BroytMann, phd2@earthling.net
|
||||
with help from Oleg Bartunov, oleg@sai.msu.su
|
||||
Copyright (C) 1998 PhiloSoft Design
|
||||
|
||||
This is copyrighted but free software. You can use it, modify and distribute
|
||||
in original or modified form providing that the author's names and the above
|
||||
copyright notice will remain.
|
||||
|
||||
Disclaimer, legal notice and absence of warranty.
|
||||
This software provided "as is" without any kind of warranty. In no event
|
||||
the author shall be liable for any damage, etc.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <locale.h>
|
||||
#include <ctype.h>
|
||||
|
||||
char * flag(int b);
|
||||
void describe_char(int c);
|
||||
|
||||
#undef LONG_FLAG
|
||||
|
||||
char * flag(int b)
|
||||
{
|
||||
#ifdef LONG_FLAG
|
||||
return b ? "yes" : "no";
|
||||
#else
|
||||
return b ? "+" : " ";
|
||||
#endif
|
||||
}
|
||||
|
||||
void describe_char(int c)
|
||||
{
|
||||
char cp = c, up = toupper(c), lo = tolower(c);
|
||||
if (!isprint(cp)) cp = ' ';
|
||||
if (!isprint(up)) up = ' ';
|
||||
if (!isprint(lo)) lo = ' ';
|
||||
|
||||
printf("chr#%-4d%2c%6s%6s%6s%6s%6s%6s%6s%6s%6s%6s%6s%4c%4c\n", c, cp, flag(isalnum(c)), flag(isalpha(c)), flag(iscntrl(c)), flag(isdigit(c)), flag(islower(c)), flag(isgraph(c)), flag(isprint(c)), flag(ispunct(c)), flag(isspace(c)), flag(isupper(c)), flag(isxdigit(c)), lo, up);
|
||||
}
|
||||
|
||||
int main() {
|
||||
short c;
|
||||
char * cur_locale;
|
||||
|
||||
cur_locale = setlocale(LC_ALL, "");
|
||||
if (cur_locale) {
|
||||
fprintf(stderr, "Successfulle set locale to %s\n", cur_locale);
|
||||
} else {
|
||||
fprintf(stderr, "Cannot setup locale. Either your libc does not provide\nlocale support, or your locale data is corrupt, or you have not set\nLANG or LC_CTYPE environment variable to proper value. Program aborted.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("char# char alnum alpha cntrl digit lower graph print punct space upper xdigit lo up\n");
|
||||
for (c = 0; c <= 255; c++)
|
||||
describe_char(c);
|
||||
|
||||
return 0;
|
||||
}
|
13
src/test/locale/test-pgsql-locale.c
Normal file
13
src/test/locale/test-pgsql-locale.c
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include "postgres.h"
|
||||
|
||||
int main() {
|
||||
#ifdef USE_LOCALE
|
||||
printf("PostgreSQL compiled with locale support\n");
|
||||
return 0;
|
||||
#else
|
||||
printf("PostgreSQL compiled without locale support\n");
|
||||
return 1;
|
||||
#endif
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user