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
|
* 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);
|
len1 = bcTruelen(arg1);
|
||||||
len2 = bcTruelen(arg2);
|
len2 = bcTruelen(arg2);
|
||||||
|
|
||||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
return (len1 < len2);
|
return (len1 < len2);
|
||||||
else
|
else
|
||||||
@ -494,7 +494,7 @@ bpcharle(char *arg1, char *arg2)
|
|||||||
len1 = bcTruelen(arg1);
|
len1 = bcTruelen(arg1);
|
||||||
len2 = bcTruelen(arg2);
|
len2 = bcTruelen(arg2);
|
||||||
|
|
||||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||||
if (0 == cmp)
|
if (0 == cmp)
|
||||||
return (bool) (len1 <= len2 ? 1 : 0);
|
return (bool) (len1 <= len2 ? 1 : 0);
|
||||||
else
|
else
|
||||||
@ -513,7 +513,7 @@ bpchargt(char *arg1, char *arg2)
|
|||||||
len1 = bcTruelen(arg1);
|
len1 = bcTruelen(arg1);
|
||||||
len2 = bcTruelen(arg2);
|
len2 = bcTruelen(arg2);
|
||||||
|
|
||||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
return (len1 > len2);
|
return (len1 > len2);
|
||||||
else
|
else
|
||||||
@ -532,7 +532,7 @@ bpcharge(char *arg1, char *arg2)
|
|||||||
len1 = bcTruelen(arg1);
|
len1 = bcTruelen(arg1);
|
||||||
len2 = bcTruelen(arg2);
|
len2 = bcTruelen(arg2);
|
||||||
|
|
||||||
cmp = strncmp(VARDATA(arg1), VARDATA(arg2), Min(len1, len2));
|
cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);
|
||||||
if (0 == cmp)
|
if (0 == cmp)
|
||||||
return (bool) (len1 >= len2 ? 1 : 0);
|
return (bool) (len1 >= len2 ? 1 : 0);
|
||||||
else
|
else
|
||||||
@ -549,7 +549,7 @@ bpcharcmp(char *arg1, char *arg2)
|
|||||||
len1 = bcTruelen(arg1);
|
len1 = bcTruelen(arg1);
|
||||||
len2 = bcTruelen(arg2);
|
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))
|
if ((0 == cmp) && (len1 != len2))
|
||||||
return (int32) (len1 < len2 ? -1 : 1);
|
return (int32) (len1 < len2 ? -1 : 1);
|
||||||
else
|
else
|
||||||
@ -641,7 +641,7 @@ varcharlt(char *arg1, char *arg2)
|
|||||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
len2 = VARSIZE(arg2) - 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)
|
if (cmp == 0)
|
||||||
return (len1 < len2);
|
return (len1 < len2);
|
||||||
else
|
else
|
||||||
@ -660,7 +660,7 @@ varcharle(char *arg1, char *arg2)
|
|||||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
len2 = VARSIZE(arg2) - 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)
|
if (0 == cmp)
|
||||||
return (bool) (len1 <= len2 ? 1 : 0);
|
return (bool) (len1 <= len2 ? 1 : 0);
|
||||||
else
|
else
|
||||||
@ -679,7 +679,7 @@ varchargt(char *arg1, char *arg2)
|
|||||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
len2 = VARSIZE(arg2) - 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)
|
if (cmp == 0)
|
||||||
return (len1 > len2);
|
return (len1 > len2);
|
||||||
else
|
else
|
||||||
@ -698,7 +698,7 @@ varcharge(char *arg1, char *arg2)
|
|||||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
len2 = VARSIZE(arg2) - 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)
|
if (0 == cmp)
|
||||||
return (bool) (len1 >= len2 ? 1 : 0);
|
return (bool) (len1 >= len2 ? 1 : 0);
|
||||||
else
|
else
|
||||||
@ -715,7 +715,7 @@ varcharcmp(char *arg1, char *arg2)
|
|||||||
|
|
||||||
len1 = VARSIZE(arg1) - VARHDRSZ;
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
len2 = VARSIZE(arg2) - 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))
|
if ((0 == cmp) && (len1 != len2))
|
||||||
return (int32) (len1 < len2 ? -1 : 1);
|
return (int32) (len1 < len2 ? -1 : 1);
|
||||||
else
|
else
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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));
|
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.
|
* Comparison function for text strings.
|
||||||
* Includes locale support, but must copy strings to temporary memory
|
* Includes locale support, but must copy strings to temporary memory
|
||||||
* to allow null-termination for inputs to strcoll().
|
* to allow null-termination for inputs to strcoll().
|
||||||
* XXX HACK code for textlen() indicates that there can be embedded nulls
|
* 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
|
* but it appears that most routines (incl. this one) assume not! - tgl 97/04/07
|
||||||
|
* Returns -1, 0 or 1
|
||||||
*/
|
*/
|
||||||
bool
|
int
|
||||||
text_lt(text *arg1, text *arg2)
|
text_cmp(text *arg1, text *arg2)
|
||||||
{
|
{
|
||||||
bool result;
|
unsigned char *a1p, *a2p;
|
||||||
|
int len1, len2;
|
||||||
#ifdef USE_LOCALE
|
|
||||||
int cval;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
int len;
|
|
||||||
unsigned char *a1p,
|
|
||||||
*a2p;
|
|
||||||
|
|
||||||
if (arg1 == NULL || arg2 == NULL)
|
if (arg1 == NULL || arg2 == NULL)
|
||||||
return ((bool) FALSE);
|
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);
|
a1p = (unsigned char *) VARDATA(arg1);
|
||||||
a2p = (unsigned char *) VARDATA(arg2);
|
a2p = (unsigned char *) VARDATA(arg2);
|
||||||
|
|
||||||
while (len != 0 && *a1p == *a2p)
|
len1 = VARSIZE(arg1) - VARHDRSZ;
|
||||||
{
|
len2 = VARSIZE(arg2) - VARHDRSZ;
|
||||||
a1p++;
|
|
||||||
a2p++;
|
|
||||||
len--;
|
|
||||||
};
|
|
||||||
|
|
||||||
result = (len ? (*a1p < *a2p) : (VARSIZE(arg1) < VARSIZE(arg2)));
|
return varstr_cmp(a1p, len1, a2p, len2);
|
||||||
#endif
|
} /* 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_lt() */
|
||||||
|
|
||||||
/* text_le()
|
/* text_le()
|
||||||
* Comparison function for text strings.
|
* 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
|
bool
|
||||||
text_le(text *arg1, text *arg2)
|
text_le(text *arg1, text *arg2)
|
||||||
{
|
{
|
||||||
bool result;
|
return (bool)(text_cmp(arg1, arg2) <= 0);
|
||||||
|
|
||||||
#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);
|
|
||||||
} /* text_le() */
|
} /* text_le() */
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* 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
|
* NOTES
|
||||||
* This should normally only be included by fmgr.h.
|
* 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 text *textcat(text *arg1, text *arg2);
|
||||||
extern bool texteq(text *arg1, text *arg2);
|
extern bool texteq(text *arg1, text *arg2);
|
||||||
extern bool textne(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_lt(text *arg1, text *arg2);
|
||||||
extern bool text_le(text *arg1, text *arg2);
|
extern bool text_le(text *arg1, text *arg2);
|
||||||
extern bool text_gt(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