mirror of
https://github.com/postgres/postgres.git
synced 2025-11-13 16:22:44 +03:00
pgindent run over code.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.35 1999/05/12 12:47:24 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.36 1999/05/25 16:11:49 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -34,7 +34,7 @@ static char *aclparse(char *s, AclItem *aip, unsigned *modechg);
|
||||
/*
|
||||
* getid
|
||||
* Consumes the first alphanumeric string (identifier) found in string
|
||||
* 's', ignoring any leading white space. If it finds a double quote
|
||||
* 's', ignoring any leading white space. If it finds a double quote
|
||||
* it returns the word inside the quotes.
|
||||
*
|
||||
* RETURNS:
|
||||
@@ -48,7 +48,7 @@ getid(char *s, char *n)
|
||||
{
|
||||
unsigned len;
|
||||
char *id;
|
||||
int in_quotes = 0;
|
||||
int in_quotes = 0;
|
||||
|
||||
Assert(s && n);
|
||||
|
||||
@@ -63,7 +63,7 @@ getid(char *s, char *n)
|
||||
|
||||
for (id = s, len = 0; isalnum(*s) || *s == '_' || in_quotes; ++len, ++s)
|
||||
{
|
||||
if (in_quotes && *s == '"')
|
||||
if (in_quotes && *s == '"')
|
||||
{
|
||||
len--;
|
||||
in_quotes = 0;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.42 1999/05/10 00:45:58 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.43 1999/05/25 16:11:50 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -200,7 +200,7 @@ array_in(char *string, /* input array in external form */
|
||||
/* array not a large object */
|
||||
dataPtr = (char *) _ReadArrayStr(p, nitems, ndim, dim, &inputproc, typelem,
|
||||
typmod, typdelim, typlen, typbyval, typalign,
|
||||
&nbytes);
|
||||
&nbytes);
|
||||
nbytes += ARR_OVERHEAD(ndim);
|
||||
retval = (ArrayType *) palloc(nbytes);
|
||||
MemSet(retval, 0, nbytes);
|
||||
@@ -246,7 +246,7 @@ array_in(char *string, /* input array in external form */
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
* _ArrayCount
|
||||
* _ArrayCount
|
||||
* Counts the number of dimensions and the *dim array for an array string.
|
||||
* The syntax for array input is C-like nested curly braces
|
||||
*-----------------------------------------------------------------------------
|
||||
@@ -1284,19 +1284,19 @@ array_assgn(ArrayType *array,
|
||||
* Map an arbitrary function to an array and return a new array with
|
||||
* same dimensions and the source elements transformed by fn().
|
||||
*/
|
||||
ArrayType *
|
||||
ArrayType *
|
||||
array_map(ArrayType *v,
|
||||
Oid type,
|
||||
char * (*fn)(),
|
||||
char *(*fn) (),
|
||||
Oid retType,
|
||||
int nargs,
|
||||
...)
|
||||
{
|
||||
ArrayType *result;
|
||||
void *args[4];
|
||||
char **values;
|
||||
char *elt;
|
||||
int *dim;
|
||||
ArrayType *result;
|
||||
void *args[4];
|
||||
char **values;
|
||||
char *elt;
|
||||
int *dim;
|
||||
int ndim;
|
||||
int nitems;
|
||||
int i;
|
||||
@@ -1308,26 +1308,23 @@ array_map(ArrayType *v,
|
||||
char typdelim;
|
||||
Oid typelem;
|
||||
Oid proc;
|
||||
char typalign;
|
||||
char *s;
|
||||
char *p;
|
||||
char typalign;
|
||||
char *s;
|
||||
char *p;
|
||||
va_list ap;
|
||||
|
||||
/* Large objects not yet supported */
|
||||
if (ARR_IS_LO(v) == true) {
|
||||
if (ARR_IS_LO(v) == true)
|
||||
elog(ERROR, "array_map: large objects not supported");
|
||||
}
|
||||
|
||||
/* Check nargs */
|
||||
if ((nargs < 0) || (nargs > 4)) {
|
||||
if ((nargs < 0) || (nargs > 4))
|
||||
elog(ERROR, "array_map: invalid nargs: %d", nargs);
|
||||
}
|
||||
|
||||
/* Copy extra args to local variable */
|
||||
va_start(ap, nargs);
|
||||
for (i=0; i<nargs; i++) {
|
||||
for (i = 0; i < nargs; i++)
|
||||
args[i] = (void *) va_arg(ap, char *);
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
/* Lookup source and result types. Unneeded variables are reused. */
|
||||
@@ -1336,14 +1333,13 @@ array_map(ArrayType *v,
|
||||
system_cache_lookup(retType, false, &typlen, &typbyval,
|
||||
&typdelim, &typelem, &proc, &typalign);
|
||||
|
||||
ndim = ARR_NDIM(v);
|
||||
dim = ARR_DIMS(v);
|
||||
ndim = ARR_NDIM(v);
|
||||
dim = ARR_DIMS(v);
|
||||
nitems = getNitems(ndim, dim);
|
||||
|
||||
/* Check for empty array */
|
||||
if (nitems <= 0) {
|
||||
if (nitems <= 0)
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Allocate temporary array for new values */
|
||||
values = (char **) palloc(nitems * sizeof(char *));
|
||||
@@ -1351,64 +1347,74 @@ array_map(ArrayType *v,
|
||||
|
||||
/* Loop over source data */
|
||||
s = (char *) ARR_DATA_PTR(v);
|
||||
for (i=0; i<nitems; i++) {
|
||||
for (i = 0; i < nitems; i++)
|
||||
{
|
||||
/* Get source element */
|
||||
if (inp_typbyval) {
|
||||
switch (inp_typlen) {
|
||||
case 1:
|
||||
elt = (char *) ((int) (*(char *) s));
|
||||
break;
|
||||
case 2:
|
||||
elt = (char *) ((int) (*(int16 *) s));
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
default:
|
||||
elt = (char *) (*(int32 *) s);
|
||||
break;
|
||||
if (inp_typbyval)
|
||||
{
|
||||
switch (inp_typlen)
|
||||
{
|
||||
case 1:
|
||||
elt = (char *) ((int) (*(char *) s));
|
||||
break;
|
||||
case 2:
|
||||
elt = (char *) ((int) (*(int16 *) s));
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
default:
|
||||
elt = (char *) (*(int32 *) s);
|
||||
break;
|
||||
}
|
||||
s += inp_typlen;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
elt = s;
|
||||
if (inp_typlen > 0) {
|
||||
if (inp_typlen > 0)
|
||||
s += inp_typlen;
|
||||
} else {
|
||||
else
|
||||
s += INTALIGN(*(int32 *) s);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Apply the given function to source elt and extra args.
|
||||
* nargs is the number of extra args taken by fn().
|
||||
* Apply the given function to source elt and extra args. nargs is
|
||||
* the number of extra args taken by fn().
|
||||
*/
|
||||
switch (nargs) {
|
||||
case 0:
|
||||
p = (char *) (*fn) (elt);
|
||||
break;
|
||||
case 1:
|
||||
p = (char *) (*fn) (elt, args[0]);
|
||||
break;
|
||||
case 2:
|
||||
p = (char *) (*fn) (elt, args[0], args[1]);
|
||||
break;
|
||||
case 3:
|
||||
p = (char *) (*fn) (elt, args[0], args[1], args[2]);
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
p = (char *) (*fn) (elt, args[0], args[1], args[2], args[3]);
|
||||
break;
|
||||
switch (nargs)
|
||||
{
|
||||
case 0:
|
||||
p = (char *) (*fn) (elt);
|
||||
break;
|
||||
case 1:
|
||||
p = (char *) (*fn) (elt, args[0]);
|
||||
break;
|
||||
case 2:
|
||||
p = (char *) (*fn) (elt, args[0], args[1]);
|
||||
break;
|
||||
case 3:
|
||||
p = (char *) (*fn) (elt, args[0], args[1], args[2]);
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
p = (char *) (*fn) (elt, args[0], args[1], args[2], args[3]);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Update values and total result size */
|
||||
if (typbyval) {
|
||||
if (typbyval)
|
||||
{
|
||||
values[i] = (char *) p;
|
||||
nbytes += typlen;
|
||||
} else {
|
||||
int len;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len;
|
||||
|
||||
len = ((typlen > 0) ? typlen : INTALIGN(*(int32 *) p));
|
||||
/* Needed because _CopyArrayEls tries to pfree items */
|
||||
if (p == elt) {
|
||||
if (p == elt)
|
||||
{
|
||||
p = (char *) palloc(len);
|
||||
memcpy(p, elt, len);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* workings can be found in the book "Software Solutions in C" by
|
||||
* Dale Schumacher, Academic Press, ISBN: 0-12-632360-7.
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.27 1998/10/12 04:07:44 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.28 1999/05/25 16:11:52 momjian Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -681,8 +681,8 @@ cash_words_out(Cash *value)
|
||||
Cash m1;
|
||||
Cash m2;
|
||||
Cash m3;
|
||||
text *result;
|
||||
|
||||
text *result;
|
||||
|
||||
/* work with positive numbers */
|
||||
if (*value < 0)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.21 1999/02/13 23:19:05 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.22 1999/05/25 16:11:53 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -163,10 +163,10 @@ text_char(text *arg1)
|
||||
text *
|
||||
char_text(int8 arg1)
|
||||
{
|
||||
text *result;
|
||||
text *result;
|
||||
|
||||
result = palloc(VARHDRSZ+1);
|
||||
VARSIZE(result) = VARHDRSZ+1;
|
||||
result = palloc(VARHDRSZ + 1);
|
||||
VARSIZE(result) = VARHDRSZ + 1;
|
||||
*(VARDATA(result)) = arg1;
|
||||
|
||||
return result;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/chunk.c,v 1.19 1999/02/13 23:19:06 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/chunk.c,v 1.20 1999/05/25 16:11:55 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -115,7 +115,7 @@ _ChunkArray(int fd,
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* GetChunkSize
|
||||
* GetChunkSize
|
||||
* given an access pattern and array dimensionality etc, this program
|
||||
* returns the dimensions of the chunk in "d"
|
||||
*-----------------------------------------------------------------------
|
||||
@@ -160,7 +160,7 @@ GetChunkSize(FILE *fd,
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* _FindBestChunk
|
||||
* _FindBestChunk
|
||||
* This routine does most of the number crunching to compute the
|
||||
* optimal chunk shape.
|
||||
* Called by GetChunkSize
|
||||
@@ -213,7 +213,7 @@ _FindBestChunk(int size,
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
* get_next
|
||||
* get_next
|
||||
* Called by _GetBestChunk to get the next tuple in the lexicographic order
|
||||
*---------------------------------------------------------------------
|
||||
*/
|
||||
@@ -420,7 +420,7 @@ seek_and_read(int pos, int size, char *buff, int fp, int from)
|
||||
#endif /* LOARRAY */
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
* _ReadChunkArray
|
||||
* _ReadChunkArray
|
||||
* returns the subarray specified bu the range indices "st" and "endp"
|
||||
* from the chunked array stored in file "fp"
|
||||
*---------------------------------------------------------------------------
|
||||
@@ -620,7 +620,7 @@ _ReadChunkArray(int *st,
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------
|
||||
* _ReadChunkArray1El
|
||||
* _ReadChunkArray1El
|
||||
* returns one element of the chunked array as specified by the index "st"
|
||||
* the chunked file descriptor is "fp"
|
||||
*-------------------------------------------------------------------------
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.31 1999/03/14 16:44:01 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.32 1999/05/25 16:11:56 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* This code is actually (almost) unused.
|
||||
@@ -988,6 +988,7 @@ isreltime(char *str)
|
||||
|
||||
return 0;
|
||||
} /* isreltime() */
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef NOT_USED
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.32 1999/04/26 04:42:48 ishii Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.33 1999/05/25 16:11:58 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -311,7 +311,7 @@ abstime_date(AbsoluteTime abstime)
|
||||
* and then convert again to try to get the time zones correct.
|
||||
*/
|
||||
static int
|
||||
date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn)
|
||||
date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
|
||||
{
|
||||
struct tm *tx;
|
||||
time_t utime;
|
||||
@@ -358,7 +358,7 @@ date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn)
|
||||
/* tm_gmtoff is Sun/DEC-ism */
|
||||
*tzp = -(tm->tm_gmtoff);
|
||||
if (tzn != NULL)
|
||||
*tzn = (char *)tm->tm_zone;
|
||||
*tzn = (char *) tm->tm_zone;
|
||||
#elif defined(HAVE_INT_TIMEZONE)
|
||||
#ifdef __CYGWIN__
|
||||
*tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
|
||||
@@ -393,13 +393,13 @@ date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn)
|
||||
|
||||
#ifdef DATEDEBUG
|
||||
#if defined(HAVE_TM_ZONE)
|
||||
printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s) dst=%d\n",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
|
||||
*tzp, tm->tm_zone, tm->tm_isdst);
|
||||
printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s) dst=%d\n",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
|
||||
*tzp, tm->tm_zone, tm->tm_isdst);
|
||||
#elif defined(HAVE_INT_TIMEZONE)
|
||||
printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s %s) dst=%d\n",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
|
||||
*tzp, tzname[0], tzname[1], tm->tm_isdst);
|
||||
printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s %s) dst=%d\n",
|
||||
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
|
||||
*tzp, tzname[0], tzname[1], tm->tm_isdst);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.70 1999/05/01 17:14:56 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.71 1999/05/25 16:12:00 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -34,9 +34,9 @@
|
||||
|
||||
static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
|
||||
static int DecodeNumber(int flen, char *field,
|
||||
int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits);
|
||||
int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits);
|
||||
static int DecodeNumberField(int len, char *str,
|
||||
int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits);
|
||||
int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits);
|
||||
static int DecodeSpecial(int field, char *lowtoken, int *val);
|
||||
static int DecodeTime(char *str, int fmask, int *tmask,
|
||||
struct tm * tm, double *fsec);
|
||||
@@ -55,9 +55,9 @@ static int tm2timespan(struct tm * tm, double fsec, TimeSpan *span);
|
||||
#define USE_DATE_CACHE 1
|
||||
#define ROUND_ALL 0
|
||||
|
||||
int day_tab[2][13] = {
|
||||
int day_tab[2][13] = {
|
||||
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0},
|
||||
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
|
||||
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
|
||||
|
||||
|
||||
char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
@@ -2090,7 +2090,7 @@ static datetkn datetktbl[] = {
|
||||
{"idlw", TZ, NEG(72)}, /* Intl. Date Line, West */
|
||||
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
|
||||
{INVALID, RESERV, DTK_INVALID},
|
||||
/* "invalid" reserved for invalid time */
|
||||
/* "invalid" reserved for invalid time */
|
||||
{"ist", TZ, 12}, /* Israel */
|
||||
{"it", TZ, 21}, /* Iran Time */
|
||||
{"jan", MONTH, 1},
|
||||
@@ -2438,7 +2438,7 @@ datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn)
|
||||
|
||||
*tzp = -(tm->tm_gmtoff); /* tm_gmtoff is Sun/DEC-ism */
|
||||
if (tzn != NULL)
|
||||
*tzn = (char *)tm->tm_zone;
|
||||
*tzn = (char *) tm->tm_zone;
|
||||
#elif defined(HAVE_INT_TIMEZONE)
|
||||
#ifdef __CYGWIN__
|
||||
*tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone);
|
||||
@@ -2833,8 +2833,10 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
case DTK_NUMBER:
|
||||
flen = strlen(field[i]);
|
||||
|
||||
/* long numeric string and either no date or no time read yet?
|
||||
* then interpret as a concatenated date or time... */
|
||||
/*
|
||||
* long numeric string and either no date or no time read
|
||||
* yet? then interpret as a concatenated date or time...
|
||||
*/
|
||||
if ((flen > 4) && !((fmask & DTK_DATE_M) && (fmask & DTK_TIME_M)))
|
||||
{
|
||||
if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
|
||||
@@ -2926,10 +2928,14 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
#ifdef DATEDEBUG
|
||||
printf("DecodeDateTime- month field %s value is %d\n", field[i], val);
|
||||
#endif
|
||||
/* already have a (numeric) month? then see if we can substitute... */
|
||||
if ((fmask & DTK_M(MONTH)) && (! haveTextMonth)
|
||||
&& (!(fmask & DTK_M(DAY)))
|
||||
&& ((tm->tm_mon >= 1) && (tm->tm_mon <= 31)))
|
||||
|
||||
/*
|
||||
* already have a (numeric) month? then see if we
|
||||
* can substitute...
|
||||
*/
|
||||
if ((fmask & DTK_M(MONTH)) && (!haveTextMonth)
|
||||
&& (!(fmask & DTK_M(DAY)))
|
||||
&& ((tm->tm_mon >= 1) && (tm->tm_mon <= 31)))
|
||||
{
|
||||
tm->tm_mday = tm->tm_mon;
|
||||
tmask = DTK_M(DAY);
|
||||
@@ -2942,7 +2948,11 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
break;
|
||||
|
||||
case DTZMOD:
|
||||
/* daylight savings time modifier (solves "MET DST" syntax) */
|
||||
|
||||
/*
|
||||
* daylight savings time modifier (solves "MET
|
||||
* DST" syntax)
|
||||
*/
|
||||
tmask |= DTK_M(DTZ);
|
||||
tm->tm_isdst = 1;
|
||||
if (tzp == NULL)
|
||||
@@ -3010,7 +3020,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
if (tm->tm_year > 0)
|
||||
tm->tm_year = -(tm->tm_year - 1);
|
||||
else
|
||||
elog(ERROR,"Inconsistant use of year %04d and 'BC'", tm->tm_year);
|
||||
elog(ERROR, "Inconsistant use of year %04d and 'BC'", tm->tm_year);
|
||||
}
|
||||
else if (is2digits)
|
||||
{
|
||||
@@ -3039,18 +3049,22 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
if ((fmask & DTK_DATE_M) != DTK_DATE_M)
|
||||
return ((fmask & DTK_TIME_M) == DTK_TIME_M) ? 1 : -1;
|
||||
|
||||
/* check for valid day of month, now that we know for sure the month and year... */
|
||||
/*
|
||||
* check for valid day of month, now that we know for sure the
|
||||
* month and year...
|
||||
*/
|
||||
if ((tm->tm_mday < 1)
|
||||
|| (tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]))
|
||||
return -1;
|
||||
|
||||
/* timezone not specified? then find local timezone if possible */
|
||||
if (((fmask & DTK_DATE_M) == DTK_DATE_M)
|
||||
&& (tzp != NULL) && (!(fmask & DTK_M(TZ))))
|
||||
&& (tzp != NULL) && (!(fmask & DTK_M(TZ))))
|
||||
{
|
||||
|
||||
/*
|
||||
* daylight savings time modifier but no standard timezone? then
|
||||
* error
|
||||
* daylight savings time modifier but no standard timezone?
|
||||
* then error
|
||||
*/
|
||||
if (fmask & DTK_M(DTZMOD))
|
||||
return -1;
|
||||
@@ -3066,7 +3080,8 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
tm->tm_mon += 1;
|
||||
|
||||
#if defined(HAVE_TM_ZONE)
|
||||
*tzp = -(tm->tm_gmtoff); /* tm_gmtoff is Sun/DEC-ism */
|
||||
*tzp = -(tm->tm_gmtoff); /* tm_gmtoff is
|
||||
* Sun/DEC-ism */
|
||||
#elif defined(HAVE_INT_TIMEZONE)
|
||||
#ifdef __CYGWIN__
|
||||
*tzp = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone);
|
||||
@@ -3077,7 +3092,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
|
||||
#endif
|
||||
|
||||
#else /* !USE_POSIX_TIME */
|
||||
#else /* !USE_POSIX_TIME */
|
||||
*tzp = CTimeZone;
|
||||
#endif
|
||||
}
|
||||
@@ -3214,8 +3229,8 @@ DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, dou
|
||||
tm->tm_hour += 12;
|
||||
|
||||
if (((tm->tm_hour < 0) || (tm->tm_hour > 23))
|
||||
|| ((tm->tm_min < 0) || (tm->tm_min > 59))
|
||||
|| ((tm->tm_sec < 0) || ((tm->tm_sec + *fsec) >= 60)))
|
||||
|| ((tm->tm_min < 0) || (tm->tm_min > 59))
|
||||
|| ((tm->tm_sec < 0) || ((tm->tm_sec + *fsec) >= 60)))
|
||||
return -1;
|
||||
|
||||
if ((fmask & DTK_TIME_M) != DTK_TIME_M)
|
||||
@@ -3344,7 +3359,7 @@ DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
|
||||
if (tm->tm_year > 0)
|
||||
tm->tm_year = -(tm->tm_year - 1);
|
||||
else
|
||||
elog(ERROR,"Inconsistant use of year %04d and 'BC'", tm->tm_year);
|
||||
elog(ERROR, "Inconsistant use of year %04d and 'BC'", tm->tm_year);
|
||||
}
|
||||
else if (is2digits)
|
||||
{
|
||||
@@ -3449,11 +3464,12 @@ DecodeNumber(int flen, char *str, int fmask,
|
||||
&tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
||||
|
||||
}
|
||||
/* Enough digits to be unequivocal year?
|
||||
* Used to test for 4 digits or more,
|
||||
* but we now test first for a three-digit doy
|
||||
* so anything bigger than two digits had better be
|
||||
* an explicit year. - thomas 1999-01-09
|
||||
|
||||
/*
|
||||
* Enough digits to be unequivocal year? Used to test for 4 digits or
|
||||
* more, but we now test first for a three-digit doy so anything
|
||||
* bigger than two digits had better be an explicit year. - thomas
|
||||
* 1999-01-09
|
||||
*/
|
||||
else if (flen > 2)
|
||||
{
|
||||
@@ -3464,7 +3480,7 @@ DecodeNumber(int flen, char *str, int fmask,
|
||||
|
||||
/* already have a year? then see if we can substitute... */
|
||||
if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(DAY)))
|
||||
&& ((tm->tm_year >= 1) && (tm->tm_year <= 31)))
|
||||
&& ((tm->tm_year >= 1) && (tm->tm_year <= 31)))
|
||||
{
|
||||
tm->tm_mday = tm->tm_year;
|
||||
*tmask = DTK_M(DAY);
|
||||
@@ -3543,7 +3559,7 @@ DecodeNumber(int flen, char *str, int fmask,
|
||||
*/
|
||||
static int
|
||||
DecodeNumberField(int len, char *str, int fmask,
|
||||
int *tmask, struct tm * tm, double *fsec, int *is2digits)
|
||||
int *tmask, struct tm * tm, double *fsec, int *is2digits)
|
||||
{
|
||||
char *cp;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.41 1999/04/20 00:26:32 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.42 1999/05/25 16:12:02 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -955,12 +955,12 @@ i2tof(int16 num)
|
||||
text *
|
||||
float8_text(float64 num)
|
||||
{
|
||||
text *result;
|
||||
int len;
|
||||
char *str;
|
||||
text *result;
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
str = float8out(num);
|
||||
len = (strlen(str)+VARHDRSZ);
|
||||
len = (strlen(str) + VARHDRSZ);
|
||||
|
||||
result = palloc(len);
|
||||
|
||||
@@ -978,9 +978,9 @@ float8_text(float64 num)
|
||||
float64
|
||||
text_float8(text *string)
|
||||
{
|
||||
float64 result;
|
||||
int len;
|
||||
char *str;
|
||||
float64 result;
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
len = (VARSIZE(string) - VARHDRSZ);
|
||||
str = palloc(len + 1);
|
||||
@@ -1000,12 +1000,12 @@ text_float8(text *string)
|
||||
text *
|
||||
float4_text(float32 num)
|
||||
{
|
||||
text *result;
|
||||
int len;
|
||||
char *str;
|
||||
text *result;
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
str = float4out(num);
|
||||
len = (strlen(str)+VARHDRSZ);
|
||||
len = (strlen(str) + VARHDRSZ);
|
||||
|
||||
result = palloc(len);
|
||||
|
||||
@@ -1023,9 +1023,9 @@ float4_text(float32 num)
|
||||
float32
|
||||
text_float4(text *string)
|
||||
{
|
||||
float32 result;
|
||||
int len;
|
||||
char *str;
|
||||
float32 result;
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
len = (VARSIZE(string) - VARHDRSZ);
|
||||
str = palloc(len + 1);
|
||||
@@ -1154,7 +1154,8 @@ dpow(float64 arg1, float64 arg2)
|
||||
#endif
|
||||
*result = (float64data) pow(tmp1, tmp2);
|
||||
#ifndef finite
|
||||
if (errno != 0) /* on some machines both EDOM & ERANGE can occur */
|
||||
if (errno != 0) /* on some machines both EDOM & ERANGE can
|
||||
* occur */
|
||||
#else
|
||||
if (!finite(*result))
|
||||
#endif
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.5 1999/05/25 05:29:38 momjian Exp $";
|
||||
static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.6 1999/05/25 16:12:04 momjian Exp $";
|
||||
|
||||
#endif
|
||||
|
||||
@@ -40,9 +40,9 @@ static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.5 1999/05/25 05:29:38 momj
|
||||
#endif
|
||||
|
||||
static char *inet_net_ntop_ipv4(const u_char *src, int bits,
|
||||
char *dst, size_t size);
|
||||
char *dst, size_t size);
|
||||
static char *inet_cidr_ntop_ipv4(const u_char *src, int bits,
|
||||
char *dst, size_t size);
|
||||
char *dst, size_t size);
|
||||
|
||||
/*
|
||||
* char *
|
||||
@@ -59,7 +59,7 @@ inet_cidr_ntop(int af, const void *src, int bits, char *dst, size_t size)
|
||||
{
|
||||
switch (af)
|
||||
{
|
||||
case AF_INET:
|
||||
case AF_INET:
|
||||
return (inet_cidr_ntop_ipv4(src, bits, dst, size));
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
@@ -162,7 +162,7 @@ inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size)
|
||||
{
|
||||
switch (af)
|
||||
{
|
||||
case AF_INET:
|
||||
case AF_INET:
|
||||
return (inet_net_ntop_ipv4(src, bits, dst, size));
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
@@ -186,10 +186,11 @@ inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size)
|
||||
static char *
|
||||
inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size)
|
||||
{
|
||||
char *odst = dst;
|
||||
char *t;
|
||||
size_t len = 4;
|
||||
int b, tb;
|
||||
char *odst = dst;
|
||||
char *t;
|
||||
size_t len = 4;
|
||||
int b,
|
||||
tb;
|
||||
|
||||
if (bits < 0 || bits > 32)
|
||||
{
|
||||
@@ -218,7 +219,7 @@ inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size)
|
||||
*dst++ = '.';
|
||||
*dst = '\0';
|
||||
}
|
||||
size -= (size_t)(dst - t);
|
||||
size -= (size_t) (dst - t);
|
||||
}
|
||||
|
||||
/* don't print masklen if 32 bits */
|
||||
@@ -232,7 +233,7 @@ inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size)
|
||||
|
||||
return (odst);
|
||||
|
||||
emsgsize:
|
||||
emsgsize:
|
||||
errno = EMSGSIZE;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7 1999/02/03 21:17:27 momjian Exp $";
|
||||
static const char rcsid[] = "$Id: inet_net_pton.c,v 1.8 1999/05/25 16:12:05 momjian Exp $";
|
||||
|
||||
#endif
|
||||
|
||||
@@ -58,8 +58,8 @@ static int inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size);
|
||||
* Paul Vixie (ISC), June 1996
|
||||
*
|
||||
* Changes:
|
||||
* I added the inet_cidr_pton function (also from Paul) and changed
|
||||
* the names to reflect their current use.
|
||||
* I added the inet_cidr_pton function (also from Paul) and changed
|
||||
* the names to reflect their current use.
|
||||
*
|
||||
*/
|
||||
int
|
||||
@@ -67,10 +67,10 @@ inet_net_pton(int af, const char *src, void *dst, size_t size)
|
||||
{
|
||||
switch (af)
|
||||
{
|
||||
case AF_INET:
|
||||
case AF_INET:
|
||||
return size == -1 ?
|
||||
inet_net_pton_ipv4(src, dst) :
|
||||
inet_cidr_pton_ipv4(src, dst, size);
|
||||
inet_net_pton_ipv4(src, dst) :
|
||||
inet_cidr_pton_ipv4(src, dst, size);
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
@@ -108,14 +108,16 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size)
|
||||
|
||||
ch = *src++;
|
||||
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
|
||||
&& isascii(src[1]) && isxdigit(src[1])) {
|
||||
&& isascii(src[1]) && isxdigit(src[1]))
|
||||
{
|
||||
/* Hexadecimal: Eat nybble string. */
|
||||
if (size <= 0)
|
||||
goto emsgsize;
|
||||
dirty = 0;
|
||||
tmp = 0;
|
||||
src++; /* skip x or X. */
|
||||
while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) {
|
||||
src++; /* skip x or X. */
|
||||
while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch))
|
||||
{
|
||||
if (isupper(ch))
|
||||
ch = tolower(ch);
|
||||
n = strchr(xdigits, ch) - xdigits;
|
||||
@@ -124,14 +126,16 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size)
|
||||
tmp = n;
|
||||
else
|
||||
tmp = (tmp << 4) | n;
|
||||
if (++dirty == 2) {
|
||||
if (++dirty == 2)
|
||||
{
|
||||
if (size-- <= 0)
|
||||
goto emsgsize;
|
||||
*dst++ = (u_char) tmp;
|
||||
dirty = 0;
|
||||
}
|
||||
}
|
||||
if (dirty) { /* Odd trailing nybble? */
|
||||
if (dirty)
|
||||
{ /* Odd trailing nybble? */
|
||||
if (size-- <= 0)
|
||||
goto emsgsize;
|
||||
*dst++ = (u_char) (tmp << 4);
|
||||
@@ -234,27 +238,30 @@ emsgsize:
|
||||
/*
|
||||
* int
|
||||
* inet_net_pton(af, src, dst, *bits)
|
||||
* convert network address from presentation to network format.
|
||||
* accepts inet_pton()'s input for this "af" plus trailing "/CIDR".
|
||||
* "dst" is assumed large enough for its "af". "bits" is set to the
|
||||
* /CIDR prefix length, which can have defaults (like /32 for IPv4).
|
||||
* convert network address from presentation to network format.
|
||||
* accepts inet_pton()'s input for this "af" plus trailing "/CIDR".
|
||||
* "dst" is assumed large enough for its "af". "bits" is set to the
|
||||
* /CIDR prefix length, which can have defaults (like /32 for IPv4).
|
||||
* return:
|
||||
* -1 if an error occurred (inspect errno; ENOENT means bad format).
|
||||
* 0 if successful conversion occurred.
|
||||
* note:
|
||||
* 192.5.5.1/28 has a nonzero host part, which means it isn't a network
|
||||
* as called for by inet_cidr_pton() but it can be a host address with
|
||||
* an included netmask.
|
||||
* -1 if an error occurred (inspect errno; ENOENT means bad format).
|
||||
* 0 if successful conversion occurred.
|
||||
* note:
|
||||
* 192.5.5.1/28 has a nonzero host part, which means it isn't a network
|
||||
* as called for by inet_cidr_pton() but it can be a host address with
|
||||
* an included netmask.
|
||||
* author:
|
||||
* Paul Vixie (ISC), October 1998
|
||||
* Paul Vixie (ISC), October 1998
|
||||
*/
|
||||
static int
|
||||
inet_net_pton_ipv4(const char *src, u_char *dst)
|
||||
{
|
||||
static const char digits[] = "0123456789";
|
||||
const u_char *odst = dst;
|
||||
int n, ch, tmp, bits;
|
||||
size_t size = 4;
|
||||
int n,
|
||||
ch,
|
||||
tmp,
|
||||
bits;
|
||||
size_t size = 4;
|
||||
|
||||
/* Get the mantissa. */
|
||||
while (ch = *src++, (isascii(ch) && isdigit(ch)))
|
||||
@@ -283,7 +290,7 @@ inet_net_pton_ipv4(const char *src, u_char *dst)
|
||||
if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst)
|
||||
{
|
||||
/* CIDR width specifier. Nothing can follow it. */
|
||||
ch = *src++; /* Skip over the /. */
|
||||
ch = *src++; /* Skip over the /. */
|
||||
bits = 0;
|
||||
do
|
||||
{
|
||||
@@ -325,11 +332,11 @@ inet_net_pton_ipv4(const char *src, u_char *dst)
|
||||
|
||||
return bits;
|
||||
|
||||
enoent:
|
||||
enoent:
|
||||
errno = ENOENT;
|
||||
return (-1);
|
||||
|
||||
emsgsize:
|
||||
emsgsize:
|
||||
errno = EMSGSIZE;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -44,21 +44,22 @@ int8in(char *str)
|
||||
if (!PointerIsValid(str))
|
||||
elog(ERROR, "Bad (null) int8 external representation", NULL);
|
||||
|
||||
/* Do our own scan, rather than relying on sscanf which might be
|
||||
/*
|
||||
* Do our own scan, rather than relying on sscanf which might be
|
||||
* broken for long long. NOTE: this will not detect int64 overflow...
|
||||
* but sscanf doesn't either...
|
||||
*/
|
||||
while (*ptr && isspace(*ptr)) /* skip leading spaces */
|
||||
while (*ptr && isspace(*ptr)) /* skip leading spaces */
|
||||
ptr++;
|
||||
if (*ptr == '-') /* handle sign */
|
||||
if (*ptr == '-') /* handle sign */
|
||||
sign = -1, ptr++;
|
||||
else if (*ptr == '+')
|
||||
ptr++;
|
||||
if (! isdigit(*ptr)) /* require at least one digit */
|
||||
if (!isdigit(*ptr)) /* require at least one digit */
|
||||
elog(ERROR, "Bad int8 external representation '%s'", str);
|
||||
while (*ptr && isdigit(*ptr)) /* process digits */
|
||||
while (*ptr && isdigit(*ptr)) /* process digits */
|
||||
tmp = tmp * 10 + (*ptr++ - '0');
|
||||
if (*ptr) /* trailing junk? */
|
||||
if (*ptr) /* trailing junk? */
|
||||
elog(ERROR, "Bad int8 external representation '%s'", str);
|
||||
|
||||
*result = (sign < 0) ? -tmp : tmp;
|
||||
@@ -70,7 +71,7 @@ int8in(char *str)
|
||||
/* int8out()
|
||||
*/
|
||||
char *
|
||||
int8out(int64 *val)
|
||||
int8out(int64 * val)
|
||||
{
|
||||
char *result;
|
||||
|
||||
@@ -99,37 +100,37 @@ int8out(int64 *val)
|
||||
* Is val1 relop val2?
|
||||
*/
|
||||
bool
|
||||
int8eq(int64 *val1, int64 *val2)
|
||||
int8eq(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 == *val2;
|
||||
} /* int8eq() */
|
||||
|
||||
bool
|
||||
int8ne(int64 *val1, int64 *val2)
|
||||
int8ne(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 != *val2;
|
||||
} /* int8ne() */
|
||||
|
||||
bool
|
||||
int8lt(int64 *val1, int64 *val2)
|
||||
int8lt(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 < *val2;
|
||||
} /* int8lt() */
|
||||
|
||||
bool
|
||||
int8gt(int64 *val1, int64 *val2)
|
||||
int8gt(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 > *val2;
|
||||
} /* int8gt() */
|
||||
|
||||
bool
|
||||
int8le(int64 *val1, int64 *val2)
|
||||
int8le(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 <= *val2;
|
||||
} /* int8le() */
|
||||
|
||||
bool
|
||||
int8ge(int64 *val1, int64 *val2)
|
||||
int8ge(int64 * val1, int64 * val2)
|
||||
{
|
||||
return *val1 >= *val2;
|
||||
} /* int8ge() */
|
||||
@@ -139,37 +140,37 @@ int8ge(int64 *val1, int64 *val2)
|
||||
* Is 64-bit val1 relop 32-bit val2?
|
||||
*/
|
||||
bool
|
||||
int84eq(int64 *val1, int32 val2)
|
||||
int84eq(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 == val2;
|
||||
} /* int84eq() */
|
||||
|
||||
bool
|
||||
int84ne(int64 *val1, int32 val2)
|
||||
int84ne(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 != val2;
|
||||
} /* int84ne() */
|
||||
|
||||
bool
|
||||
int84lt(int64 *val1, int32 val2)
|
||||
int84lt(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 < val2;
|
||||
} /* int84lt() */
|
||||
|
||||
bool
|
||||
int84gt(int64 *val1, int32 val2)
|
||||
int84gt(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 > val2;
|
||||
} /* int84gt() */
|
||||
|
||||
bool
|
||||
int84le(int64 *val1, int32 val2)
|
||||
int84le(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 <= val2;
|
||||
} /* int84le() */
|
||||
|
||||
bool
|
||||
int84ge(int64 *val1, int32 val2)
|
||||
int84ge(int64 * val1, int32 val2)
|
||||
{
|
||||
return *val1 >= val2;
|
||||
} /* int84ge() */
|
||||
@@ -179,37 +180,37 @@ int84ge(int64 *val1, int32 val2)
|
||||
* Is 32-bit val1 relop 64-bit val2?
|
||||
*/
|
||||
bool
|
||||
int48eq(int32 val1, int64 *val2)
|
||||
int48eq(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 == *val2;
|
||||
} /* int48eq() */
|
||||
|
||||
bool
|
||||
int48ne(int32 val1, int64 *val2)
|
||||
int48ne(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 != *val2;
|
||||
} /* int48ne() */
|
||||
|
||||
bool
|
||||
int48lt(int32 val1, int64 *val2)
|
||||
int48lt(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 < *val2;
|
||||
} /* int48lt() */
|
||||
|
||||
bool
|
||||
int48gt(int32 val1, int64 *val2)
|
||||
int48gt(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 > *val2;
|
||||
} /* int48gt() */
|
||||
|
||||
bool
|
||||
int48le(int32 val1, int64 *val2)
|
||||
int48le(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 <= *val2;
|
||||
} /* int48le() */
|
||||
|
||||
bool
|
||||
int48ge(int32 val1, int64 *val2)
|
||||
int48ge(int32 val1, int64 * val2)
|
||||
{
|
||||
return val1 >= *val2;
|
||||
} /* int48ge() */
|
||||
@@ -220,7 +221,7 @@ int48ge(int32 val1, int64 *val2)
|
||||
*---------------------------------------------------------*/
|
||||
|
||||
int64 *
|
||||
int8um(int64 *val)
|
||||
int8um(int64 * val)
|
||||
{
|
||||
int64 temp = 0;
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
@@ -235,7 +236,7 @@ int8um(int64 *val)
|
||||
|
||||
|
||||
int64 *
|
||||
int8pl(int64 *val1, int64 *val2)
|
||||
int8pl(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -248,7 +249,7 @@ int8pl(int64 *val1, int64 *val2)
|
||||
} /* int8pl() */
|
||||
|
||||
int64 *
|
||||
int8mi(int64 *val1, int64 *val2)
|
||||
int8mi(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -261,7 +262,7 @@ int8mi(int64 *val1, int64 *val2)
|
||||
} /* int8mi() */
|
||||
|
||||
int64 *
|
||||
int8mul(int64 *val1, int64 *val2)
|
||||
int8mul(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -274,7 +275,7 @@ int8mul(int64 *val1, int64 *val2)
|
||||
} /* int8mul() */
|
||||
|
||||
int64 *
|
||||
int8div(int64 *val1, int64 *val2)
|
||||
int8div(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -287,7 +288,7 @@ int8div(int64 *val1, int64 *val2)
|
||||
} /* int8div() */
|
||||
|
||||
int64 *
|
||||
int8larger(int64 *val1, int64 *val2)
|
||||
int8larger(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -300,7 +301,7 @@ int8larger(int64 *val1, int64 *val2)
|
||||
} /* int8larger() */
|
||||
|
||||
int64 *
|
||||
int8smaller(int64 *val1, int64 *val2)
|
||||
int8smaller(int64 * val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -314,7 +315,7 @@ int8smaller(int64 *val1, int64 *val2)
|
||||
|
||||
|
||||
int64 *
|
||||
int84pl(int64 *val1, int32 val2)
|
||||
int84pl(int64 * val1, int32 val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -327,7 +328,7 @@ int84pl(int64 *val1, int32 val2)
|
||||
} /* int84pl() */
|
||||
|
||||
int64 *
|
||||
int84mi(int64 *val1, int32 val2)
|
||||
int84mi(int64 * val1, int32 val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -340,7 +341,7 @@ int84mi(int64 *val1, int32 val2)
|
||||
} /* int84mi() */
|
||||
|
||||
int64 *
|
||||
int84mul(int64 *val1, int32 val2)
|
||||
int84mul(int64 * val1, int32 val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -353,7 +354,7 @@ int84mul(int64 *val1, int32 val2)
|
||||
} /* int84mul() */
|
||||
|
||||
int64 *
|
||||
int84div(int64 *val1, int32 val2)
|
||||
int84div(int64 * val1, int32 val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -367,7 +368,7 @@ int84div(int64 *val1, int32 val2)
|
||||
|
||||
|
||||
int64 *
|
||||
int48pl(int32 val1, int64 *val2)
|
||||
int48pl(int32 val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -380,7 +381,7 @@ int48pl(int32 val1, int64 *val2)
|
||||
} /* int48pl() */
|
||||
|
||||
int64 *
|
||||
int48mi(int32 val1, int64 *val2)
|
||||
int48mi(int32 val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -393,7 +394,7 @@ int48mi(int32 val1, int64 *val2)
|
||||
} /* int48mi() */
|
||||
|
||||
int64 *
|
||||
int48mul(int32 val1, int64 *val2)
|
||||
int48mul(int32 val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -406,7 +407,7 @@ int48mul(int32 val1, int64 *val2)
|
||||
} /* int48mul() */
|
||||
|
||||
int64 *
|
||||
int48div(int32 val1, int64 *val2)
|
||||
int48div(int32 val1, int64 * val2)
|
||||
{
|
||||
int64 *result = palloc(sizeof(int64));
|
||||
|
||||
@@ -434,7 +435,7 @@ int48(int32 val)
|
||||
} /* int48() */
|
||||
|
||||
int32
|
||||
int84(int64 *val)
|
||||
int84(int64 * val)
|
||||
{
|
||||
int32 result;
|
||||
|
||||
@@ -442,6 +443,7 @@ int84(int64 *val)
|
||||
elog(ERROR, "Invalid (null) int64, can't convert int8 to int4", NULL);
|
||||
|
||||
#if NOT_USED
|
||||
|
||||
/*
|
||||
* Hmm. This conditional always tests true on my i686/linux box. It's
|
||||
* a gcc compiler bug, or I'm missing something obvious, which is more
|
||||
@@ -449,8 +451,8 @@ int84(int64 *val)
|
||||
*/
|
||||
if ((*val < INT_MIN) || (*val > INT_MAX))
|
||||
#endif
|
||||
if ((*val < (-pow(2, 31) + 1)) || (*val > (pow(2, 31) - 1)))
|
||||
elog(ERROR, "int8 conversion to int4 is out of range", NULL);
|
||||
if ((*val < (-pow(2, 31) + 1)) || (*val > (pow(2, 31) - 1)))
|
||||
elog(ERROR, "int8 conversion to int4 is out of range", NULL);
|
||||
|
||||
result = *val;
|
||||
|
||||
@@ -471,7 +473,7 @@ int28 (int16 val)
|
||||
} /* int28() */
|
||||
|
||||
int16
|
||||
int82(int64 *val)
|
||||
int82(int64 * val)
|
||||
{
|
||||
int16 result;
|
||||
|
||||
@@ -489,7 +491,7 @@ int82(int64 *val)
|
||||
#endif
|
||||
|
||||
float64
|
||||
i8tod(int64 *val)
|
||||
i8tod(int64 * val)
|
||||
{
|
||||
float64 result = palloc(sizeof(float64data));
|
||||
|
||||
@@ -533,9 +535,9 @@ text_int8(text *str)
|
||||
elog(ERROR, "Bad (null) int8 external representation", NULL);
|
||||
|
||||
len = (VARSIZE(str) - VARHDRSZ);
|
||||
s = palloc(len+1);
|
||||
s = palloc(len + 1);
|
||||
memmove(s, VARDATA(str), len);
|
||||
*(s+len) = '\0';
|
||||
*(s + len) = '\0';
|
||||
|
||||
return int8in(s);
|
||||
} /* text_int8() */
|
||||
@@ -544,7 +546,7 @@ text_int8(text *str)
|
||||
/* int8_text()
|
||||
*/
|
||||
text *
|
||||
int8_text(int64 *val)
|
||||
int8_text(int64 * val)
|
||||
{
|
||||
text *result;
|
||||
|
||||
@@ -564,4 +566,3 @@ int8_text(int64 *val)
|
||||
|
||||
return result;
|
||||
} /* int8out() */
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "utils/builtins.h" /* where the function declarations go */
|
||||
#include "mb/pg_wchar.h"
|
||||
|
||||
static int like(pg_wchar *text, pg_wchar *p);
|
||||
static int like(pg_wchar * text, pg_wchar * p);
|
||||
|
||||
/*
|
||||
* interface routines called by the function manager
|
||||
@@ -38,7 +38,7 @@ static int like(pg_wchar *text, pg_wchar *p);
|
||||
charlen - the length of the string
|
||||
*/
|
||||
static bool
|
||||
fixedlen_like(char *s, struct varlena *p, int charlen)
|
||||
fixedlen_like(char *s, struct varlena * p, int charlen)
|
||||
{
|
||||
pg_wchar *sterm,
|
||||
*pterm;
|
||||
@@ -83,7 +83,7 @@ fixedlen_like(char *s, struct varlena *p, int charlen)
|
||||
}
|
||||
|
||||
bool
|
||||
namelike(NameData *n, struct varlena *p)
|
||||
namelike(NameData *n, struct varlena * p)
|
||||
{
|
||||
if (!n)
|
||||
return FALSE;
|
||||
@@ -91,13 +91,13 @@ namelike(NameData *n, struct varlena *p)
|
||||
}
|
||||
|
||||
bool
|
||||
namenlike(NameData *s, struct varlena *p)
|
||||
namenlike(NameData *s, struct varlena * p)
|
||||
{
|
||||
return !namelike(s, p);
|
||||
}
|
||||
|
||||
bool
|
||||
textlike(struct varlena *s, struct varlena *p)
|
||||
textlike(struct varlena * s, struct varlena * p)
|
||||
{
|
||||
if (!s)
|
||||
return FALSE;
|
||||
@@ -105,13 +105,13 @@ textlike(struct varlena *s, struct varlena *p)
|
||||
}
|
||||
|
||||
bool
|
||||
textnlike(struct varlena *s, struct varlena *p)
|
||||
textnlike(struct varlena * s, struct varlena * p)
|
||||
{
|
||||
return !textlike(s, p);
|
||||
}
|
||||
|
||||
|
||||
/* $Revision: 1.23 $
|
||||
/* $Revision: 1.24 $
|
||||
** "like.c" A first attempt at a LIKE operator for Postgres95.
|
||||
**
|
||||
** Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.
|
||||
@@ -146,11 +146,11 @@ textnlike(struct varlena *s, struct varlena *p)
|
||||
** Match text and p, return LIKE_TRUE, LIKE_FALSE, or LIKE_ABORT.
|
||||
*/
|
||||
static int
|
||||
DoMatch(pg_wchar *text, pg_wchar *p)
|
||||
DoMatch(pg_wchar * text, pg_wchar * p)
|
||||
{
|
||||
int matched;
|
||||
|
||||
for (; *p && *text; text++, p++)
|
||||
for (; *p && *text; text ++, p++)
|
||||
{
|
||||
switch (*p)
|
||||
{
|
||||
@@ -159,7 +159,7 @@ DoMatch(pg_wchar *text, pg_wchar *p)
|
||||
p++;
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
if (*text != *p)
|
||||
if (*text !=*p)
|
||||
return LIKE_FALSE;
|
||||
break;
|
||||
case '_':
|
||||
@@ -177,16 +177,16 @@ DoMatch(pg_wchar *text, pg_wchar *p)
|
||||
{
|
||||
/* Optimization to prevent most recursion */
|
||||
if ((*text == *p ||
|
||||
*p == '\\' || *p == '%' || *p == '_') &&
|
||||
*p == '\\' || *p == '%' || *p == '_') &&
|
||||
(matched = DoMatch(text, p)) != LIKE_FALSE)
|
||||
return matched;
|
||||
text++;
|
||||
text ++;
|
||||
}
|
||||
return LIKE_ABORT;
|
||||
}
|
||||
}
|
||||
|
||||
if (*text != '\0')
|
||||
if (*text !='\0')
|
||||
return LIKE_ABORT;
|
||||
else
|
||||
{
|
||||
@@ -203,7 +203,7 @@ DoMatch(pg_wchar *text, pg_wchar *p)
|
||||
** User-level routine. Returns TRUE or FALSE.
|
||||
*/
|
||||
static int
|
||||
like(pg_wchar *text, pg_wchar *p)
|
||||
like(pg_wchar * text, pg_wchar * p)
|
||||
{
|
||||
if (p[0] == '%' && p[1] == '\0')
|
||||
return TRUE;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* PostgreSQL type definitions for MAC addresses.
|
||||
*
|
||||
* $Id: mac.c,v 1.7 1999/03/22 05:00:57 momjian Exp $
|
||||
* $Id: mac.c,v 1.8 1999/05/25 16:12:08 momjian Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@@ -13,119 +13,119 @@
|
||||
#include <utils/inet.h>
|
||||
|
||||
manufacturer manufacturers[] = {
|
||||
{0x00, 0x00, 0x0C, "Cisco"},
|
||||
{0x00, 0x00, 0x0E, "Fujitsu"},
|
||||
{0x00, 0x00, 0x0F, "NeXT"},
|
||||
{0x00, 0x00, 0x10, "Sytek"},
|
||||
{0x00, 0x00, 0x1D, "Cabletron"},
|
||||
{0x00, 0x00, 0x20, "DIAB"},
|
||||
{0x00, 0x00, 0x22, "Visual Technology"},
|
||||
{0x00, 0x00, 0x2A, "TRW"},
|
||||
{0x00, 0x00, 0x32, "GPT Limited"},
|
||||
{0x00, 0x00, 0x5A, "S & Koch"},
|
||||
{0x00, 0x00, 0x5E, "IANA"},
|
||||
{0x00, 0x00, 0x65, "Network General"},
|
||||
{0x00, 0x00, 0x6B, "MIPS"},
|
||||
{0x00, 0x00, 0x77, "MIPS"},
|
||||
{0x00, 0x00, 0x7A, "Ardent"},
|
||||
{0x00, 0x00, 0x89, "Cayman Systems"},
|
||||
{0x00, 0x00, 0x93, "Proteon"},
|
||||
{0x00, 0x00, 0x9F, "Ameristar Technology"},
|
||||
{0x00, 0x00, 0xA2, "Wellfleet"},
|
||||
{0x00, 0x00, 0xA3, "Network Application Technology"},
|
||||
{0x00, 0x00, 0xA6, "Network General"},
|
||||
{0x00, 0x00, 0xA7, "NCD"},
|
||||
{0x00, 0x00, 0xA9, "Network Systems"},
|
||||
{0x00, 0x00, 0xAA, "Xerox"},
|
||||
{0x00, 0x00, 0xB3, "CIMLinc"},
|
||||
{0x00, 0x00, 0xB7, "Dove Fastnet"},
|
||||
{0x00, 0x00, 0xBC, "Allen-Bradley"},
|
||||
{0x00, 0x00, 0xC0, "Western Digital"},
|
||||
{0x00, 0x00, 0xC5, "Farallon"},
|
||||
{0x00, 0x00, 0xC6, "Hewlett-Packard"},
|
||||
{0x00, 0x00, 0xC8, "Altos"},
|
||||
{0x00, 0x00, 0xC9, "Emulex"},
|
||||
{0x00, 0x00, 0xD7, "Dartmouth College"},
|
||||
{0x00, 0x00, 0xD8, "3Com (?)"},
|
||||
{0x00, 0x00, 0xDD, "Gould"},
|
||||
{0x00, 0x00, 0xDE, "Unigraph"},
|
||||
{0x00, 0x00, 0xE2, "Acer Counterpoint"},
|
||||
{0x00, 0x00, 0xEF, "Alantec"},
|
||||
{0x00, 0x00, 0xFD, "High Level Hardware"},
|
||||
{0x00, 0x01, 0x02, "BBN internal usage"},
|
||||
{0x00, 0x20, 0xAF, "3Com"},
|
||||
{0x00, 0x17, 0x00, "Kabel"},
|
||||
{0x00, 0x80, 0x64, "Wyse Technology"},
|
||||
{0x00, 0x80, 0x2B, "IMAC (?)"},
|
||||
{0x00, 0x80, 0x2D, "Xylogics, Inc."},
|
||||
{0x00, 0x80, 0x8C, "Frontier Software Development"},
|
||||
{0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
|
||||
{0x00, 0x80, 0xD3, "Shiva"},
|
||||
{0x00, 0xAA, 0x00, "Intel"},
|
||||
{0x00, 0xDD, 0x00, "Ungermann-Bass"},
|
||||
{0x00, 0xDD, 0x01, "Ungermann-Bass"},
|
||||
{0x02, 0x07, 0x01, "Racal InterLan"},
|
||||
{0x02, 0x04, 0x06, "BBN internal usage"},
|
||||
{0x02, 0x60, 0x86, "Satelcom MegaPac"},
|
||||
{0x02, 0x60, 0x8C, "3Com"},
|
||||
{0x02, 0xCF, 0x1F, "CMC"},
|
||||
{0x08, 0x00, 0x02, "3Com"},
|
||||
{0x08, 0x00, 0x03, "ACC"},
|
||||
{0x08, 0x00, 0x05, "Symbolics"},
|
||||
{0x08, 0x00, 0x08, "BBN"},
|
||||
{0x08, 0x00, 0x09, "Hewlett-Packard"},
|
||||
{0x08, 0x00, 0x0A, "Nestar Systems"},
|
||||
{0x08, 0x00, 0x0B, "Unisys"},
|
||||
{0x08, 0x00, 0x11, "Tektronix"},
|
||||
{0x08, 0x00, 0x14, "Excelan"},
|
||||
{0x08, 0x00, 0x17, "NSC"},
|
||||
{0x08, 0x00, 0x1A, "Data General"},
|
||||
{0x08, 0x00, 0x1B, "Data General"},
|
||||
{0x08, 0x00, 0x1E, "Apollo"},
|
||||
{0x08, 0x00, 0x20, "Sun"},
|
||||
{0x08, 0x00, 0x22, "NBI"},
|
||||
{0x08, 0x00, 0x25, "CDC"},
|
||||
{0x08, 0x00, 0x26, "Norsk Data"},
|
||||
{0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
|
||||
{0x08, 0x00, 0x28, "Texas Instruments"},
|
||||
{0x08, 0x00, 0x2B, "DEC"},
|
||||
{0x08, 0x00, 0x2E, "Metaphor"},
|
||||
{0x08, 0x00, 0x2F, "Prime Computer"},
|
||||
{0x08, 0x00, 0x36, "Intergraph"},
|
||||
{0x08, 0x00, 0x37, "Fujitsu-Xerox"},
|
||||
{0x08, 0x00, 0x38, "Bull"},
|
||||
{0x08, 0x00, 0x39, "Spider Systems"},
|
||||
{0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
|
||||
{0x08, 0x00, 0x45, "Xylogics (?)"},
|
||||
{0x08, 0x00, 0x46, "Sony"},
|
||||
{0x08, 0x00, 0x47, "Sequent"},
|
||||
{0x08, 0x00, 0x49, "Univation"},
|
||||
{0x08, 0x00, 0x4C, "Encore"},
|
||||
{0x08, 0x00, 0x4E, "BICC"},
|
||||
{0x08, 0x00, 0x56, "Stanford University"},
|
||||
{0x08, 0x00, 0x58, "DECsystem 20 (?)"},
|
||||
{0x08, 0x00, 0x5A, "IBM"},
|
||||
{0x08, 0x00, 0x67, "Comdesign"},
|
||||
{0x08, 0x00, 0x68, "Ridge"},
|
||||
{0x08, 0x00, 0x69, "Silicon Graphics"},
|
||||
{0x08, 0x00, 0x6E, "Concurrent"},
|
||||
{0x08, 0x00, 0x75, "DDE"},
|
||||
{0x08, 0x00, 0x7C, "Vitalink"},
|
||||
{0x08, 0x00, 0x80, "XIOS"},
|
||||
{0x08, 0x00, 0x86, "Imagen/QMS"},
|
||||
{0x08, 0x00, 0x87, "Xyplex"},
|
||||
{0x08, 0x00, 0x89, "Kinetics"},
|
||||
{0x08, 0x00, 0x8B, "Pyramid"},
|
||||
{0x08, 0x00, 0x8D, "XyVision"},
|
||||
{0x08, 0x00, 0x90, "Retix Inc"},
|
||||
{0x48, 0x44, 0x53, "HDS (?)"},
|
||||
{0x80, 0x00, 0x10, "AT&T"},
|
||||
{0xAA, 0x00, 0x00, "DEC"},
|
||||
{0xAA, 0x00, 0x01, "DEC"},
|
||||
{0xAA, 0x00, 0x02, "DEC"},
|
||||
{0xAA, 0x00, 0x03, "DEC"},
|
||||
{0xAA, 0x00, 0x04, "DEC"},
|
||||
{0x00, 0x00, 0x00, NULL}
|
||||
{0x00, 0x00, 0x0C, "Cisco"},
|
||||
{0x00, 0x00, 0x0E, "Fujitsu"},
|
||||
{0x00, 0x00, 0x0F, "NeXT"},
|
||||
{0x00, 0x00, 0x10, "Sytek"},
|
||||
{0x00, 0x00, 0x1D, "Cabletron"},
|
||||
{0x00, 0x00, 0x20, "DIAB"},
|
||||
{0x00, 0x00, 0x22, "Visual Technology"},
|
||||
{0x00, 0x00, 0x2A, "TRW"},
|
||||
{0x00, 0x00, 0x32, "GPT Limited"},
|
||||
{0x00, 0x00, 0x5A, "S & Koch"},
|
||||
{0x00, 0x00, 0x5E, "IANA"},
|
||||
{0x00, 0x00, 0x65, "Network General"},
|
||||
{0x00, 0x00, 0x6B, "MIPS"},
|
||||
{0x00, 0x00, 0x77, "MIPS"},
|
||||
{0x00, 0x00, 0x7A, "Ardent"},
|
||||
{0x00, 0x00, 0x89, "Cayman Systems"},
|
||||
{0x00, 0x00, 0x93, "Proteon"},
|
||||
{0x00, 0x00, 0x9F, "Ameristar Technology"},
|
||||
{0x00, 0x00, 0xA2, "Wellfleet"},
|
||||
{0x00, 0x00, 0xA3, "Network Application Technology"},
|
||||
{0x00, 0x00, 0xA6, "Network General"},
|
||||
{0x00, 0x00, 0xA7, "NCD"},
|
||||
{0x00, 0x00, 0xA9, "Network Systems"},
|
||||
{0x00, 0x00, 0xAA, "Xerox"},
|
||||
{0x00, 0x00, 0xB3, "CIMLinc"},
|
||||
{0x00, 0x00, 0xB7, "Dove Fastnet"},
|
||||
{0x00, 0x00, 0xBC, "Allen-Bradley"},
|
||||
{0x00, 0x00, 0xC0, "Western Digital"},
|
||||
{0x00, 0x00, 0xC5, "Farallon"},
|
||||
{0x00, 0x00, 0xC6, "Hewlett-Packard"},
|
||||
{0x00, 0x00, 0xC8, "Altos"},
|
||||
{0x00, 0x00, 0xC9, "Emulex"},
|
||||
{0x00, 0x00, 0xD7, "Dartmouth College"},
|
||||
{0x00, 0x00, 0xD8, "3Com (?)"},
|
||||
{0x00, 0x00, 0xDD, "Gould"},
|
||||
{0x00, 0x00, 0xDE, "Unigraph"},
|
||||
{0x00, 0x00, 0xE2, "Acer Counterpoint"},
|
||||
{0x00, 0x00, 0xEF, "Alantec"},
|
||||
{0x00, 0x00, 0xFD, "High Level Hardware"},
|
||||
{0x00, 0x01, 0x02, "BBN internal usage"},
|
||||
{0x00, 0x20, 0xAF, "3Com"},
|
||||
{0x00, 0x17, 0x00, "Kabel"},
|
||||
{0x00, 0x80, 0x64, "Wyse Technology"},
|
||||
{0x00, 0x80, 0x2B, "IMAC (?)"},
|
||||
{0x00, 0x80, 0x2D, "Xylogics, Inc."},
|
||||
{0x00, 0x80, 0x8C, "Frontier Software Development"},
|
||||
{0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
|
||||
{0x00, 0x80, 0xD3, "Shiva"},
|
||||
{0x00, 0xAA, 0x00, "Intel"},
|
||||
{0x00, 0xDD, 0x00, "Ungermann-Bass"},
|
||||
{0x00, 0xDD, 0x01, "Ungermann-Bass"},
|
||||
{0x02, 0x07, 0x01, "Racal InterLan"},
|
||||
{0x02, 0x04, 0x06, "BBN internal usage"},
|
||||
{0x02, 0x60, 0x86, "Satelcom MegaPac"},
|
||||
{0x02, 0x60, 0x8C, "3Com"},
|
||||
{0x02, 0xCF, 0x1F, "CMC"},
|
||||
{0x08, 0x00, 0x02, "3Com"},
|
||||
{0x08, 0x00, 0x03, "ACC"},
|
||||
{0x08, 0x00, 0x05, "Symbolics"},
|
||||
{0x08, 0x00, 0x08, "BBN"},
|
||||
{0x08, 0x00, 0x09, "Hewlett-Packard"},
|
||||
{0x08, 0x00, 0x0A, "Nestar Systems"},
|
||||
{0x08, 0x00, 0x0B, "Unisys"},
|
||||
{0x08, 0x00, 0x11, "Tektronix"},
|
||||
{0x08, 0x00, 0x14, "Excelan"},
|
||||
{0x08, 0x00, 0x17, "NSC"},
|
||||
{0x08, 0x00, 0x1A, "Data General"},
|
||||
{0x08, 0x00, 0x1B, "Data General"},
|
||||
{0x08, 0x00, 0x1E, "Apollo"},
|
||||
{0x08, 0x00, 0x20, "Sun"},
|
||||
{0x08, 0x00, 0x22, "NBI"},
|
||||
{0x08, 0x00, 0x25, "CDC"},
|
||||
{0x08, 0x00, 0x26, "Norsk Data"},
|
||||
{0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
|
||||
{0x08, 0x00, 0x28, "Texas Instruments"},
|
||||
{0x08, 0x00, 0x2B, "DEC"},
|
||||
{0x08, 0x00, 0x2E, "Metaphor"},
|
||||
{0x08, 0x00, 0x2F, "Prime Computer"},
|
||||
{0x08, 0x00, 0x36, "Intergraph"},
|
||||
{0x08, 0x00, 0x37, "Fujitsu-Xerox"},
|
||||
{0x08, 0x00, 0x38, "Bull"},
|
||||
{0x08, 0x00, 0x39, "Spider Systems"},
|
||||
{0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
|
||||
{0x08, 0x00, 0x45, "Xylogics (?)"},
|
||||
{0x08, 0x00, 0x46, "Sony"},
|
||||
{0x08, 0x00, 0x47, "Sequent"},
|
||||
{0x08, 0x00, 0x49, "Univation"},
|
||||
{0x08, 0x00, 0x4C, "Encore"},
|
||||
{0x08, 0x00, 0x4E, "BICC"},
|
||||
{0x08, 0x00, 0x56, "Stanford University"},
|
||||
{0x08, 0x00, 0x58, "DECsystem 20 (?)"},
|
||||
{0x08, 0x00, 0x5A, "IBM"},
|
||||
{0x08, 0x00, 0x67, "Comdesign"},
|
||||
{0x08, 0x00, 0x68, "Ridge"},
|
||||
{0x08, 0x00, 0x69, "Silicon Graphics"},
|
||||
{0x08, 0x00, 0x6E, "Concurrent"},
|
||||
{0x08, 0x00, 0x75, "DDE"},
|
||||
{0x08, 0x00, 0x7C, "Vitalink"},
|
||||
{0x08, 0x00, 0x80, "XIOS"},
|
||||
{0x08, 0x00, 0x86, "Imagen/QMS"},
|
||||
{0x08, 0x00, 0x87, "Xyplex"},
|
||||
{0x08, 0x00, 0x89, "Kinetics"},
|
||||
{0x08, 0x00, 0x8B, "Pyramid"},
|
||||
{0x08, 0x00, 0x8D, "XyVision"},
|
||||
{0x08, 0x00, 0x90, "Retix Inc"},
|
||||
{0x48, 0x44, 0x53, "HDS (?)"},
|
||||
{0x80, 0x00, 0x10, "AT&T"},
|
||||
{0xAA, 0x00, 0x00, "DEC"},
|
||||
{0xAA, 0x00, 0x01, "DEC"},
|
||||
{0xAA, 0x00, 0x02, "DEC"},
|
||||
{0xAA, 0x00, 0x03, "DEC"},
|
||||
{0xAA, 0x00, 0x04, "DEC"},
|
||||
{0x00, 0x00, 0x00, NULL}
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: nabstime.c,v 1.54 1999/04/26 04:42:49 ishii Exp $
|
||||
* $Id: nabstime.c,v 1.55 1999/05/25 16:12:09 momjian Exp $
|
||||
*
|
||||
*/
|
||||
#include <stdio.h>
|
||||
@@ -64,13 +64,18 @@ GetCurrentAbsoluteTime(void)
|
||||
CDayLight = (tm->tm_isdst > 0);
|
||||
|
||||
#ifdef NOT_USED
|
||||
|
||||
/*
|
||||
* XXX is there a better way to get local timezone string w/o
|
||||
* tzname? - tgl 97/03/18
|
||||
*/
|
||||
strftime(CTZName, MAXTZLEN, "%Z", tm);
|
||||
#endif
|
||||
/* XXX FreeBSD man pages indicate that this should work - thomas 1998-12-12 */
|
||||
|
||||
/*
|
||||
* XXX FreeBSD man pages indicate that this should work - thomas
|
||||
* 1998-12-12
|
||||
*/
|
||||
strcpy(CTZName, tm->tm_zone);
|
||||
|
||||
#elif defined(HAVE_INT_TIMEZONE)
|
||||
@@ -79,10 +84,10 @@ GetCurrentAbsoluteTime(void)
|
||||
CDayLight = tm->tm_isdst;
|
||||
CTimeZone =
|
||||
#ifdef __CYGWIN32__
|
||||
(tm->tm_isdst ? (_timezone - 3600) : _timezone);
|
||||
(tm->tm_isdst ? (_timezone - 3600) : _timezone);
|
||||
#else
|
||||
(tm->tm_isdst ? (timezone - 3600) : timezone);
|
||||
#endif
|
||||
(tm->tm_isdst ? (timezone - 3600) : timezone);
|
||||
#endif
|
||||
strcpy(CTZName, tzname[tm->tm_isdst]);
|
||||
#else
|
||||
#error USE_POSIX_TIME defined but no time zone available
|
||||
@@ -91,8 +96,9 @@ GetCurrentAbsoluteTime(void)
|
||||
CTimeZone = tb.timezone * 60;
|
||||
CDayLight = (tb.dstflag != 0);
|
||||
|
||||
/* XXX does this work to get the local timezone string in V7?
|
||||
* - tgl 97/03/18
|
||||
/*
|
||||
* XXX does this work to get the local timezone string in V7? -
|
||||
* tgl 97/03/18
|
||||
*/
|
||||
strftime(CTZName, MAXTZLEN, "%Z", localtime(&now));
|
||||
#endif
|
||||
@@ -389,6 +395,7 @@ AbsoluteTimeIsAfter(AbsoluteTime time1, AbsoluteTime time2)
|
||||
|
||||
return time1 > time2;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* abstime_finite()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.17 1999/02/13 23:19:25 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.18 1999/05/25 16:12:10 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -161,6 +161,7 @@ namecmp(Name n1, Name n2)
|
||||
{
|
||||
return strncmp(n1->data, n2->data, NAMEDATALEN);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* is for IP V4 CIDR notation, but prepared for V6: just
|
||||
* add the necessary bits where the comments indicate.
|
||||
*
|
||||
* $Id: network.c,v 1.8 1999/04/15 02:20:50 thomas Exp $
|
||||
* $Id: network.c,v 1.9 1999/05/25 16:12:11 momjian Exp $
|
||||
* Jon Postel RIP 16 Oct 1998
|
||||
*/
|
||||
|
||||
@@ -52,7 +52,7 @@ network_in(char *src, int type)
|
||||
|
||||
if (!src)
|
||||
return NULL;
|
||||
|
||||
|
||||
dst = palloc(VARHDRSZ + sizeof(inet_struct));
|
||||
if (dst == NULL)
|
||||
elog(ERROR, "unable to allocate memory in network_in()");
|
||||
@@ -60,7 +60,7 @@ network_in(char *src, int type)
|
||||
/* First, try for an IP V4 address: */
|
||||
ip_family(dst) = AF_INET;
|
||||
bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst),
|
||||
type ? ip_addrsize(dst) : -1);
|
||||
type ? ip_addrsize(dst) : -1);
|
||||
if ((bits < 0) || (bits > 32))
|
||||
/* Go for an IPV6 address here, before faulting out: */
|
||||
elog(ERROR, "could not parse \"%s\"", src);
|
||||
@@ -102,10 +102,10 @@ inet_out(inet *src)
|
||||
/* It's an IP V4 address: */
|
||||
if (ip_type(src))
|
||||
dst = inet_cidr_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
|
||||
tmp, sizeof(tmp));
|
||||
tmp, sizeof(tmp));
|
||||
else
|
||||
dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
|
||||
tmp, sizeof(tmp));
|
||||
tmp, sizeof(tmp));
|
||||
|
||||
if (dst == NULL)
|
||||
elog(ERROR, "unable to print address (%s)", strerror(errno));
|
||||
@@ -222,7 +222,7 @@ network_sub(inet *a1, inet *a2)
|
||||
{
|
||||
if (!PointerIsValid(a1) || !PointerIsValid(a2))
|
||||
return FALSE;
|
||||
|
||||
|
||||
if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
|
||||
{
|
||||
return ((ip_bits(a1) > ip_bits(a2))
|
||||
@@ -370,7 +370,7 @@ network_broadcast(inet *ip)
|
||||
if (ip_family(ip) == AF_INET)
|
||||
{
|
||||
/* It's an IP V4 address: */
|
||||
int addr;
|
||||
int addr;
|
||||
unsigned long mask = 0xffffffff;
|
||||
|
||||
if (ip_bits(ip) < 32)
|
||||
@@ -402,7 +402,7 @@ network_network(inet *ip)
|
||||
{
|
||||
text *ret;
|
||||
int len;
|
||||
char tmp[sizeof("255.255.255.255/32")];
|
||||
char tmp[sizeof("255.255.255.255/32")];
|
||||
|
||||
if (!PointerIsValid(ip))
|
||||
return NULL;
|
||||
@@ -410,8 +410,8 @@ network_network(inet *ip)
|
||||
if (ip_family(ip) == AF_INET)
|
||||
{
|
||||
/* It's an IP V4 address: */
|
||||
int addr = htonl(ntohl(ip_v4addr(ip)) & (0xffffffff << (32 - ip_bits(ip))));
|
||||
|
||||
int addr = htonl(ntohl(ip_v4addr(ip)) & (0xffffffff << (32 - ip_bits(ip))));
|
||||
|
||||
if (inet_cidr_ntop(AF_INET, &addr, ip_bits(ip), tmp, sizeof(tmp)) == NULL)
|
||||
elog(ERROR, "unable to print network (%s)", strerror(errno));
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.15 1999/03/15 03:24:32 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.16 1999/05/25 16:12:12 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -47,18 +47,16 @@ int4notin(int32 not_in_arg, char *relation_and_attr)
|
||||
int attrid;
|
||||
char *relation,
|
||||
*attribute;
|
||||
char my_copy[NAMEDATALEN*2+2];
|
||||
char my_copy[NAMEDATALEN * 2 + 2];
|
||||
Datum value;
|
||||
|
||||
strncpy(my_copy, relation_and_attr, sizeof(my_copy));
|
||||
my_copy[sizeof(my_copy)-1] = '\0';
|
||||
my_copy[sizeof(my_copy) - 1] = '\0';
|
||||
|
||||
relation = (char *) strtok(my_copy, ".");
|
||||
attribute = (char *) strtok(NULL, ".");
|
||||
if (attribute == NULL)
|
||||
{
|
||||
elog(ERROR, "int4notin: must provide relationname.attributename");
|
||||
}
|
||||
|
||||
/* Open the relation and get a relation descriptor */
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.29 1999/02/13 23:19:29 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.30 1999/05/25 16:12:14 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -55,17 +55,17 @@ pg_atoi(char *s, int size, int c)
|
||||
|
||||
Assert(s);
|
||||
|
||||
errno = 0;
|
||||
errno = 0;
|
||||
|
||||
/*
|
||||
* Some versions of strtol treat the empty string as an error. This
|
||||
* Some versions of strtol treat the empty string as an error. This
|
||||
* code will explicitly return 0 for an empty string.
|
||||
*/
|
||||
|
||||
if (s == (char *)NULL)
|
||||
if (s == (char *) NULL)
|
||||
elog(ERROR, "pg_atoi: NULL pointer!");
|
||||
else if (*s == 0)
|
||||
l = (long)0;
|
||||
l = (long) 0;
|
||||
else
|
||||
l = strtol(s, &badp, 10);
|
||||
if (errno) /* strtol must set ERANGE */
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.36 1999/05/10 00:45:59 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.37 1999/05/25 16:12:17 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -41,9 +41,9 @@
|
||||
int32
|
||||
regprocin(char *pro_name_or_oid)
|
||||
{
|
||||
HeapTuple proctup = NULL;
|
||||
HeapTupleData tuple;
|
||||
RegProcedure result = InvalidOid;
|
||||
HeapTuple proctup = NULL;
|
||||
HeapTupleData tuple;
|
||||
RegProcedure result = InvalidOid;
|
||||
|
||||
if (pro_name_or_oid == NULL)
|
||||
return InvalidOid;
|
||||
@@ -52,6 +52,7 @@ regprocin(char *pro_name_or_oid)
|
||||
|
||||
if (!IsBootstrapProcessingMode())
|
||||
{
|
||||
|
||||
/*
|
||||
* we need to use the oid because there can be multiple entries
|
||||
* with the same name. We accept int4eq_1323 and 1323.
|
||||
@@ -76,23 +77,23 @@ regprocin(char *pro_name_or_oid)
|
||||
RetrieveIndexResult indexRes;
|
||||
Buffer buffer;
|
||||
int matches = 0;
|
||||
|
||||
|
||||
ScanKeyEntryInitialize(&skey[0],
|
||||
(bits16) 0x0,
|
||||
(AttrNumber) 1,
|
||||
(RegProcedure) F_NAMEEQ,
|
||||
PointerGetDatum(pro_name_or_oid));
|
||||
|
||||
|
||||
hdesc = heap_openr(ProcedureRelationName);
|
||||
idesc = index_openr(ProcedureNameIndex);
|
||||
|
||||
|
||||
sd = index_beginscan(idesc, false, 1, skey);
|
||||
while ((indexRes = index_getnext(sd, ForwardScanDirection)))
|
||||
{
|
||||
tuple.t_self = indexRes->heap_iptr;
|
||||
heap_fetch(hdesc, SnapshotNow,
|
||||
&tuple,
|
||||
&buffer);
|
||||
&tuple,
|
||||
&buffer);
|
||||
pfree(indexRes);
|
||||
if (tuple.t_data != NULL)
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* out of it's tuple
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.14 1999/05/25 08:49:33 wieck Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.15 1999/05/25 16:12:19 momjian Exp $
|
||||
*
|
||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||
*
|
||||
@@ -57,16 +57,17 @@
|
||||
#include "catalog/pg_opclass.h"
|
||||
#include "fmgr.h"
|
||||
|
||||
#define BUFSIZE 8192
|
||||
#define BUFSIZE 8192
|
||||
|
||||
/* ----------
|
||||
* Local data types
|
||||
* ----------
|
||||
*/
|
||||
typedef struct QryHier {
|
||||
struct QryHier *parent;
|
||||
Query *query;
|
||||
} QryHier;
|
||||
typedef struct QryHier
|
||||
{
|
||||
struct QryHier *parent;
|
||||
Query *query;
|
||||
} QryHier;
|
||||
|
||||
|
||||
/* ----------
|
||||
@@ -90,7 +91,7 @@ static char *query_getopclass = "SELECT * FROM pg_opclass WHERE oid = $1";
|
||||
*/
|
||||
text *pg_get_ruledef(NameData *rname);
|
||||
text *pg_get_viewdef(NameData *rname);
|
||||
text *pg_get_indexdef(Oid indexrelid);
|
||||
text *pg_get_indexdef(Oid indexrelid);
|
||||
NameData *pg_get_userbyid(int4 uid);
|
||||
|
||||
|
||||
@@ -100,16 +101,16 @@ NameData *pg_get_userbyid(int4 uid);
|
||||
*/
|
||||
static char *make_ruledef(HeapTuple ruletup, TupleDesc rulettc);
|
||||
static char *make_viewdef(HeapTuple ruletup, TupleDesc rulettc);
|
||||
static char *get_query_def(Query *query, QryHier *parentqh);
|
||||
static char *get_select_query_def(Query *query, QryHier *qh);
|
||||
static char *get_insert_query_def(Query *query, QryHier *qh);
|
||||
static char *get_update_query_def(Query *query, QryHier *qh);
|
||||
static char *get_delete_query_def(Query *query, QryHier *qh);
|
||||
static char *get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix);
|
||||
static char *get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix);
|
||||
static char *get_tle_expr(QryHier *qh, int rt_index, TargetEntry *tle, bool varprefix);
|
||||
static char *get_query_def(Query *query, QryHier * parentqh);
|
||||
static char *get_select_query_def(Query *query, QryHier * qh);
|
||||
static char *get_insert_query_def(Query *query, QryHier * qh);
|
||||
static char *get_update_query_def(Query *query, QryHier * qh);
|
||||
static char *get_delete_query_def(Query *query, QryHier * qh);
|
||||
static char *get_rule_expr(QryHier * qh, int rt_index, Node *node, bool varprefix);
|
||||
static char *get_func_expr(QryHier * qh, int rt_index, Expr *expr, bool varprefix);
|
||||
static char *get_tle_expr(QryHier * qh, int rt_index, TargetEntry *tle, bool varprefix);
|
||||
static char *get_const_expr(Const *constval);
|
||||
static char *get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix);
|
||||
static char *get_sublink_expr(QryHier * qh, int rt_index, Node *node, bool varprefix);
|
||||
static char *get_relation_name(Oid relid);
|
||||
static char *get_attribute_name(Oid relid, int2 attnum);
|
||||
static bool check_if_rte_used(int rt_index, Node *node, int sup);
|
||||
@@ -314,27 +315,27 @@ pg_get_viewdef(NameData *rname)
|
||||
* only return the SELECT part of a view
|
||||
* ----------
|
||||
*/
|
||||
text *
|
||||
text *
|
||||
pg_get_indexdef(Oid indexrelid)
|
||||
{
|
||||
text *indexdef;
|
||||
text *indexdef;
|
||||
HeapTuple ht_idx;
|
||||
HeapTuple ht_idxrel;
|
||||
HeapTuple ht_indrel;
|
||||
HeapTuple spi_tup;
|
||||
TupleDesc spi_ttc;
|
||||
int spi_fno;
|
||||
Form_pg_index idxrec;
|
||||
Form_pg_class idxrelrec;
|
||||
Form_pg_class indrelrec;
|
||||
int spi_fno;
|
||||
Form_pg_index idxrec;
|
||||
Form_pg_class idxrelrec;
|
||||
Form_pg_class indrelrec;
|
||||
Datum spi_args[1];
|
||||
char spi_nulls[2];
|
||||
int spirc;
|
||||
int len;
|
||||
int keyno;
|
||||
int spirc;
|
||||
int len;
|
||||
int keyno;
|
||||
char buf[BUFSIZE];
|
||||
char keybuf[BUFSIZE];
|
||||
char *sep;
|
||||
char *sep;
|
||||
|
||||
/* ----------
|
||||
* Connect to SPI manager
|
||||
@@ -371,30 +372,30 @@ pg_get_indexdef(Oid indexrelid)
|
||||
* ----------
|
||||
*/
|
||||
ht_idx = SearchSysCacheTuple(INDEXRELID,
|
||||
ObjectIdGetDatum(indexrelid), 0, 0, 0);
|
||||
ObjectIdGetDatum(indexrelid), 0, 0, 0);
|
||||
if (!HeapTupleIsValid(ht_idx))
|
||||
elog(ERROR, "syscache lookup for index %u failed", indexrelid);
|
||||
idxrec = (Form_pg_index)GETSTRUCT(ht_idx);
|
||||
idxrec = (Form_pg_index) GETSTRUCT(ht_idx);
|
||||
|
||||
/* ----------
|
||||
* Fetch the pg_class tuple of the index relation
|
||||
* ----------
|
||||
*/
|
||||
ht_idxrel = SearchSysCacheTuple(RELOID,
|
||||
ObjectIdGetDatum(idxrec->indexrelid), 0, 0, 0);
|
||||
ObjectIdGetDatum(idxrec->indexrelid), 0, 0, 0);
|
||||
if (!HeapTupleIsValid(ht_idxrel))
|
||||
elog(ERROR, "syscache lookup for relid %u failed", idxrec->indexrelid);
|
||||
idxrelrec = (Form_pg_class)GETSTRUCT(ht_idxrel);
|
||||
idxrelrec = (Form_pg_class) GETSTRUCT(ht_idxrel);
|
||||
|
||||
/* ----------
|
||||
* Fetch the pg_class tuple of the indexed relation
|
||||
* ----------
|
||||
*/
|
||||
ht_indrel = SearchSysCacheTuple(RELOID,
|
||||
ObjectIdGetDatum(idxrec->indrelid), 0, 0, 0);
|
||||
ObjectIdGetDatum(idxrec->indrelid), 0, 0, 0);
|
||||
if (!HeapTupleIsValid(ht_indrel))
|
||||
elog(ERROR, "syscache lookup for relid %u failed", idxrec->indrelid);
|
||||
indrelrec = (Form_pg_class)GETSTRUCT(ht_indrel);
|
||||
indrelrec = (Form_pg_class) GETSTRUCT(ht_indrel);
|
||||
|
||||
/* ----------
|
||||
* Get the am name for the index relation
|
||||
@@ -417,11 +418,11 @@ pg_get_indexdef(Oid indexrelid)
|
||||
* ----------
|
||||
*/
|
||||
sprintf(buf, "CREATE %sINDEX \"%s\" ON \"%s\" USING %s (",
|
||||
idxrec->indisunique ? "UNIQUE " : "",
|
||||
nameout(&(idxrelrec->relname)),
|
||||
nameout(&(indrelrec->relname)),
|
||||
SPI_getvalue(spi_tup, spi_ttc, spi_fno));
|
||||
|
||||
idxrec->indisunique ? "UNIQUE " : "",
|
||||
nameout(&(idxrelrec->relname)),
|
||||
nameout(&(indrelrec->relname)),
|
||||
SPI_getvalue(spi_tup, spi_ttc, spi_fno));
|
||||
|
||||
/* ----------
|
||||
* Collect the indexed attributes
|
||||
* ----------
|
||||
@@ -445,7 +446,7 @@ pg_get_indexdef(Oid indexrelid)
|
||||
strcat(keybuf, "oid");
|
||||
else
|
||||
strcat(keybuf, get_attribute_name(idxrec->indrelid,
|
||||
idxrec->indkey[keyno]));
|
||||
idxrec->indkey[keyno]));
|
||||
strcat(keybuf, "\"");
|
||||
|
||||
/* ----------
|
||||
@@ -478,10 +479,10 @@ pg_get_indexdef(Oid indexrelid)
|
||||
if (idxrec->indproc != InvalidOid)
|
||||
{
|
||||
HeapTuple proctup;
|
||||
Form_pg_proc procStruct;
|
||||
Form_pg_proc procStruct;
|
||||
|
||||
proctup = SearchSysCacheTuple(PROOID,
|
||||
ObjectIdGetDatum(idxrec->indproc), 0, 0, 0);
|
||||
ObjectIdGetDatum(idxrec->indproc), 0, 0, 0);
|
||||
if (!HeapTupleIsValid(proctup))
|
||||
elog(ERROR, "cache lookup for proc %u failed", idxrec->indproc);
|
||||
|
||||
@@ -508,13 +509,11 @@ pg_get_indexdef(Oid indexrelid)
|
||||
strcat(buf, "\"");
|
||||
}
|
||||
else
|
||||
/* ----------
|
||||
* For the others say 'attr opclass [, ...]'
|
||||
* ----------
|
||||
*/
|
||||
{
|
||||
/* ----------
|
||||
* For the others say 'attr opclass [, ...]'
|
||||
* ----------
|
||||
*/
|
||||
strcat(buf, keybuf);
|
||||
}
|
||||
|
||||
/* ----------
|
||||
* Finish
|
||||
@@ -551,8 +550,8 @@ NameData *
|
||||
pg_get_userbyid(int4 uid)
|
||||
{
|
||||
HeapTuple usertup;
|
||||
Form_pg_shadow user_rec;
|
||||
NameData *result;
|
||||
Form_pg_shadow user_rec;
|
||||
NameData *result;
|
||||
|
||||
/* ----------
|
||||
* Allocate space for the result
|
||||
@@ -566,16 +565,14 @@ pg_get_userbyid(int4 uid)
|
||||
* ----------
|
||||
*/
|
||||
usertup = SearchSysCacheTuple(USESYSID,
|
||||
ObjectIdGetDatum(uid), 0, 0, 0);
|
||||
ObjectIdGetDatum(uid), 0, 0, 0);
|
||||
if (HeapTupleIsValid(usertup))
|
||||
{
|
||||
user_rec = (Form_pg_shadow)GETSTRUCT(usertup);
|
||||
user_rec = (Form_pg_shadow) GETSTRUCT(usertup);
|
||||
StrNCpy(result->data, (&(user_rec->usename))->data, NAMEDATALEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf((char *)result, "unknown (UID=%d)", uid);
|
||||
}
|
||||
sprintf((char *) result, "unknown (UID=%d)", uid);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -683,12 +680,12 @@ make_ruledef(HeapTuple ruletup, TupleDesc rulettc)
|
||||
{
|
||||
Node *qual;
|
||||
Query *query;
|
||||
QryHier qh;
|
||||
QryHier qh;
|
||||
|
||||
qual = stringToNode(ev_qual);
|
||||
query = (Query *) lfirst(actions);
|
||||
qh.parent = NULL;
|
||||
qh.query = query;
|
||||
qh.query = query;
|
||||
|
||||
strcat(buf, " WHERE ");
|
||||
strcat(buf, get_rule_expr(&qh, 0, qual, TRUE));
|
||||
@@ -809,16 +806,16 @@ make_viewdef(HeapTuple ruletup, TupleDesc rulettc)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_query_def(Query *query, QryHier *parentqh)
|
||||
get_query_def(Query *query, QryHier * parentqh)
|
||||
{
|
||||
QryHier qh;
|
||||
|
||||
qh.parent = parentqh;
|
||||
qh.query = query;
|
||||
qh.query = query;
|
||||
|
||||
switch (query->commandType)
|
||||
{
|
||||
case CMD_SELECT:
|
||||
case CMD_SELECT:
|
||||
return get_select_query_def(query, &qh);
|
||||
break;
|
||||
|
||||
@@ -853,7 +850,7 @@ get_query_def(Query *query, QryHier *parentqh)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_select_query_def(Query *query, QryHier *qh)
|
||||
get_select_query_def(Query *query, QryHier * qh)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
char *sep;
|
||||
@@ -1023,7 +1020,7 @@ get_select_query_def(Query *query, QryHier *qh)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_insert_query_def(Query *query, QryHier *qh)
|
||||
get_insert_query_def(Query *query, QryHier * qh)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
char *sep;
|
||||
@@ -1133,7 +1130,7 @@ get_insert_query_def(Query *query, QryHier *qh)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_update_query_def(Query *query, QryHier *qh)
|
||||
get_update_query_def(Query *query, QryHier * qh)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
char *sep;
|
||||
@@ -1186,7 +1183,7 @@ get_update_query_def(Query *query, QryHier *qh)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_delete_query_def(Query *query, QryHier *qh)
|
||||
get_delete_query_def(Query *query, QryHier * qh)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
RangeTblEntry *rte;
|
||||
@@ -1220,7 +1217,7 @@ get_delete_query_def(Query *query, QryHier *qh)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
get_rule_expr(QryHier * qh, int rt_index, Node *node, bool varprefix)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
|
||||
@@ -1254,7 +1251,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
strcat(buf, aggref->aggname);
|
||||
strcat(buf, "\"(");
|
||||
strcat(buf, get_rule_expr(qh, rt_index,
|
||||
(Node *) (aggref->target), varprefix));
|
||||
(Node *) (aggref->target), varprefix));
|
||||
strcat(buf, ")");
|
||||
return pstrdup(buf);
|
||||
}
|
||||
@@ -1263,15 +1260,15 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
case T_GroupClause:
|
||||
{
|
||||
GroupClause *grp = (GroupClause *) node;
|
||||
List *l;
|
||||
TargetEntry *tle = NULL;
|
||||
List *l;
|
||||
TargetEntry *tle = NULL;
|
||||
|
||||
foreach(l, qh->query->targetList)
|
||||
{
|
||||
if (((TargetEntry *)lfirst(l))->resdom->resgroupref ==
|
||||
grp->tleGroupref)
|
||||
if (((TargetEntry *) lfirst(l))->resdom->resgroupref ==
|
||||
grp->tleGroupref)
|
||||
{
|
||||
tle = (TargetEntry *)lfirst(l);
|
||||
tle = (TargetEntry *) lfirst(l);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1279,7 +1276,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
if (tle == NULL)
|
||||
elog(ERROR, "GROUP BY expression not found in targetlist");
|
||||
|
||||
return get_rule_expr(qh, rt_index, (Node *)tle, varprefix);
|
||||
return get_rule_expr(qh, rt_index, (Node *) tle, varprefix);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1358,9 +1355,10 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
{
|
||||
Var *var = (Var *) node;
|
||||
RangeTblEntry *rte;
|
||||
int sup = var->varlevelsup;
|
||||
int sup = var->varlevelsup;
|
||||
|
||||
while(sup-- > 0) qh = qh->parent;
|
||||
while (sup-- > 0)
|
||||
qh = qh->parent;
|
||||
|
||||
rte = (RangeTblEntry *) nth(var->varno - 1, qh->query->rtable);
|
||||
|
||||
@@ -1396,9 +1394,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
break;
|
||||
|
||||
case T_SubLink:
|
||||
{
|
||||
return get_sublink_expr(qh, rt_index, node, varprefix);
|
||||
}
|
||||
break;
|
||||
|
||||
case T_Const:
|
||||
@@ -1421,7 +1417,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix)
|
||||
get_func_expr(QryHier * qh, int rt_index, Expr *expr, bool varprefix)
|
||||
{
|
||||
char buf[BUFSIZE];
|
||||
HeapTuple proctup;
|
||||
@@ -1500,7 +1496,7 @@ get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_tle_expr(QryHier *qh, int rt_index, TargetEntry *tle, bool varprefix)
|
||||
get_tle_expr(QryHier * qh, int rt_index, TargetEntry *tle, bool varprefix)
|
||||
{
|
||||
HeapTuple proctup;
|
||||
Form_pg_proc procStruct;
|
||||
@@ -1609,14 +1605,14 @@ get_const_expr(Const *constval)
|
||||
* ----------
|
||||
*/
|
||||
static char *
|
||||
get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
get_sublink_expr(QryHier * qh, int rt_index, Node *node, bool varprefix)
|
||||
{
|
||||
SubLink *sublink = (SubLink *) node;
|
||||
Query *query = (Query *) (sublink->subselect);
|
||||
Expr *expr;
|
||||
Expr *expr;
|
||||
List *l;
|
||||
char *sep;
|
||||
char buf[BUFSIZE];
|
||||
char buf[BUFSIZE];
|
||||
|
||||
buf[0] = '\0';
|
||||
|
||||
@@ -1640,32 +1636,33 @@ get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix)
|
||||
strcat(buf, " ");
|
||||
}
|
||||
|
||||
switch (sublink->subLinkType) {
|
||||
switch (sublink->subLinkType)
|
||||
{
|
||||
case EXISTS_SUBLINK:
|
||||
strcat(buf, "EXISTS ");
|
||||
break;
|
||||
|
||||
case ANY_SUBLINK:
|
||||
expr = (Expr *)lfirst(sublink->oper);
|
||||
expr = (Expr *) lfirst(sublink->oper);
|
||||
strcat(buf, get_opname(((Oper *) (expr->oper))->opno));
|
||||
strcat(buf, " ANY ");
|
||||
break;
|
||||
|
||||
case ALL_SUBLINK:
|
||||
expr = (Expr *)lfirst(sublink->oper);
|
||||
expr = (Expr *) lfirst(sublink->oper);
|
||||
strcat(buf, get_opname(((Oper *) (expr->oper))->opno));
|
||||
strcat(buf, " ALL ");
|
||||
break;
|
||||
|
||||
case EXPR_SUBLINK:
|
||||
expr = (Expr *)lfirst(sublink->oper);
|
||||
expr = (Expr *) lfirst(sublink->oper);
|
||||
strcat(buf, get_opname(((Oper *) (expr->oper))->opno));
|
||||
strcat(buf, " ");
|
||||
break;
|
||||
|
||||
default:
|
||||
elog(ERROR, "unupported sublink type %d",
|
||||
sublink->subLinkType);
|
||||
sublink->subLinkType);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.27 1999/05/10 00:46:00 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.28 1999/05/25 16:12:20 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -393,6 +393,7 @@ btreesel(Oid operatorObjectId,
|
||||
|
||||
if (FunctionalSelectivity(nIndexKeys, attributeNumber))
|
||||
{
|
||||
|
||||
/*
|
||||
* Need to call the functions selectivity function here. For now
|
||||
* simply assume it's 1/3 since functions don't currently have
|
||||
@@ -437,6 +438,7 @@ btreenpage(Oid operatorObjectId,
|
||||
|
||||
if (FunctionalSelectivity(nIndexKeys, attributeNumber))
|
||||
{
|
||||
|
||||
/*
|
||||
* Need to call the functions selectivity function here. For now
|
||||
* simply assume it's 1/3 since functions don't currently have
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.45 1999/05/19 17:53:11 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.46 1999/05/25 16:12:21 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -82,7 +82,7 @@ bpcharin(char *s, int dummy, int32 atttypmod)
|
||||
len = atttypmod - VARHDRSZ;
|
||||
|
||||
if (len > BLCKSZ - 128)
|
||||
elog(ERROR, "bpcharin: length of char() must be less than %d",BLCKSZ-128);
|
||||
elog(ERROR, "bpcharin: length of char() must be less than %d", BLCKSZ - 128);
|
||||
|
||||
result = (char *) palloc(atttypmod);
|
||||
VARSIZE(result) = atttypmod;
|
||||
@@ -152,7 +152,7 @@ bpchar(char *s, int32 len)
|
||||
rlen = len - VARHDRSZ;
|
||||
|
||||
if (rlen > BLCKSZ - 128)
|
||||
elog(ERROR, "bpchar: length of char() must be less than %d",BLCKSZ-128);
|
||||
elog(ERROR, "bpchar: length of char() must be less than %d", BLCKSZ - 128);
|
||||
|
||||
#ifdef STRINGDEBUG
|
||||
printf("bpchar- convert string length %d (%d) ->%d (%d)\n",
|
||||
@@ -163,13 +163,15 @@ bpchar(char *s, int32 len)
|
||||
VARSIZE(result) = len;
|
||||
r = VARDATA(result);
|
||||
#ifdef MULTIBYTE
|
||||
/* truncate multi-byte string in a way not to break
|
||||
multi-byte boundary */
|
||||
if (VARSIZE(s) > len) {
|
||||
slen = pg_mbcliplen(VARDATA(s), VARSIZE(s)-VARHDRSZ, rlen);
|
||||
} else {
|
||||
|
||||
/*
|
||||
* truncate multi-byte string in a way not to break multi-byte
|
||||
* boundary
|
||||
*/
|
||||
if (VARSIZE(s) > len)
|
||||
slen = pg_mbcliplen(VARDATA(s), VARSIZE(s) - VARHDRSZ, rlen);
|
||||
else
|
||||
slen = VARSIZE(s) - VARHDRSZ;
|
||||
}
|
||||
#else
|
||||
slen = VARSIZE(s) - VARHDRSZ;
|
||||
#endif
|
||||
@@ -206,7 +208,7 @@ bpchar(char *s, int32 len)
|
||||
* Converts an array of char() type to a specific internal length.
|
||||
* len is the length specified in () plus VARHDRSZ bytes.
|
||||
*/
|
||||
ArrayType *
|
||||
ArrayType *
|
||||
_bpchar(ArrayType *v, int32 len)
|
||||
{
|
||||
return array_map(v, BPCHAROID, bpchar, BPCHAROID, 1, len);
|
||||
@@ -331,7 +333,7 @@ varcharin(char *s, int dummy, int32 atttypmod)
|
||||
len = atttypmod; /* clip the string at max length */
|
||||
|
||||
if (len > BLCKSZ - 128)
|
||||
elog(ERROR, "varcharin: length of char() must be less than %d",BLCKSZ-128);
|
||||
elog(ERROR, "varcharin: length of char() must be less than %d", BLCKSZ - 128);
|
||||
|
||||
result = (char *) palloc(len);
|
||||
VARSIZE(result) = len;
|
||||
@@ -390,15 +392,18 @@ varchar(char *s, int32 slen)
|
||||
/* only reach here if we need to truncate string... */
|
||||
|
||||
#ifdef MULTIBYTE
|
||||
/* truncate multi-byte string in a way not to break
|
||||
multi-byte boundary */
|
||||
|
||||
/*
|
||||
* truncate multi-byte string in a way not to break multi-byte
|
||||
* boundary
|
||||
*/
|
||||
len = pg_mbcliplen(VARDATA(s), slen - VARHDRSZ, slen - VARHDRSZ);
|
||||
slen = len + VARHDRSZ;
|
||||
#else
|
||||
len = slen - VARHDRSZ;
|
||||
#endif
|
||||
|
||||
if (len > BLCKSZ-128)
|
||||
if (len > BLCKSZ - 128)
|
||||
elog(ERROR, "varchar: length of varchar() must be less than BLCKSZ-128");
|
||||
|
||||
result = (char *) palloc(slen);
|
||||
@@ -412,7 +417,7 @@ varchar(char *s, int32 slen)
|
||||
* Converts an array of varchar() type to the specified size.
|
||||
* len is the length specified in () plus VARHDRSZ bytes.
|
||||
*/
|
||||
ArrayType *
|
||||
ArrayType *
|
||||
_varchar(ArrayType *v, int32 len)
|
||||
{
|
||||
return array_map(v, VARCHAROID, varchar, VARCHAROID, 1, len);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.47 1999/02/13 23:19:36 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.48 1999/05/25 16:12:21 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -314,7 +314,7 @@ textcat(text *t1, text *t2)
|
||||
* - string length
|
||||
*
|
||||
* If the starting position is zero or less, then return from the start of the string
|
||||
* adjusting the length to be consistant with the "negative start" per SQL92.
|
||||
* adjusting the length to be consistant with the "negative start" per SQL92.
|
||||
* If the length is less than zero, return the remaining string.
|
||||
*
|
||||
* Note that the arguments operate on octet length,
|
||||
@@ -352,11 +352,14 @@ text_substr(text *string, int32 m, int32 n)
|
||||
m = 1;
|
||||
n = 0;
|
||||
}
|
||||
/* starting position before the start of the string?
|
||||
* then offset into the string per SQL92 spec... */
|
||||
|
||||
/*
|
||||
* starting position before the start of the string? then offset into
|
||||
* the string per SQL92 spec...
|
||||
*/
|
||||
else if (m < 1)
|
||||
{
|
||||
n += (m-1);
|
||||
n += (m - 1);
|
||||
m = 1;
|
||||
}
|
||||
|
||||
@@ -588,10 +591,10 @@ text_ge(text *arg1, text *arg2)
|
||||
text *
|
||||
text_larger(text *arg1, text *arg2)
|
||||
{
|
||||
text *result;
|
||||
text *temp;
|
||||
text *result;
|
||||
text *temp;
|
||||
|
||||
temp = ((text_cmp(arg1, arg2) <= 0)? arg2: arg1);
|
||||
temp = ((text_cmp(arg1, arg2) <= 0) ? arg2 : arg1);
|
||||
|
||||
/* Make a copy */
|
||||
|
||||
@@ -604,10 +607,10 @@ text_larger(text *arg1, text *arg2)
|
||||
text *
|
||||
text_smaller(text *arg1, text *arg2)
|
||||
{
|
||||
text *result;
|
||||
text *temp;
|
||||
text *result;
|
||||
text *temp;
|
||||
|
||||
temp = ((text_cmp(arg1, arg2) > 0)? arg2: arg1);
|
||||
temp = ((text_cmp(arg1, arg2) > 0) ? arg2 : arg1);
|
||||
|
||||
/* Make a copy */
|
||||
|
||||
|
||||
5
src/backend/utils/cache/catcache.c
vendored
5
src/backend/utils/cache/catcache.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.40 1999/05/10 00:46:03 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.41 1999/05/25 16:12:22 momjian Exp $
|
||||
*
|
||||
* Notes:
|
||||
* XXX This needs to use exception.h to handle recovery when
|
||||
@@ -196,6 +196,7 @@ CatalogCacheInitializeCache(struct catcache * cache,
|
||||
|
||||
if (cache->cc_key[i] > 0)
|
||||
{
|
||||
|
||||
/*
|
||||
* Yoiks. The implementation of the hashing code and the
|
||||
* implementation of int28's are at loggerheads. The right
|
||||
@@ -277,7 +278,7 @@ CatalogCacheSetId(CatCache *cacheInOutP, int id)
|
||||
#endif
|
||||
|
||||
/* ----------------
|
||||
* comphash
|
||||
* comphash
|
||||
* Compute a hash value, somehow.
|
||||
*
|
||||
* XXX explain algorithm here.
|
||||
|
||||
12
src/backend/utils/cache/inval.c
vendored
12
src/backend/utils/cache/inval.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.22 1999/05/10 00:46:07 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.23 1999/05/25 16:12:23 momjian Exp $
|
||||
*
|
||||
* Note - this code is real crufty...
|
||||
*
|
||||
@@ -106,7 +106,7 @@ InvalidationEntryAllocate(uint16 size)
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
* LocalInvalidRegister
|
||||
* LocalInvalidRegister
|
||||
* Returns a new local cache invalidation state containing a new entry.
|
||||
* --------------------------------
|
||||
*/
|
||||
@@ -117,7 +117,7 @@ LocalInvalidRegister(LocalInvalid invalid,
|
||||
Assert(PointerIsValid(entry));
|
||||
|
||||
((InvalidationUserData *) entry)->dataP[-1] =
|
||||
(InvalidationUserData *) invalid;
|
||||
(InvalidationUserData *) invalid;
|
||||
|
||||
return entry;
|
||||
}
|
||||
@@ -504,7 +504,7 @@ InitLocalInvalidateData()
|
||||
|
||||
|
||||
/*
|
||||
* DiscardInvalid
|
||||
* DiscardInvalid
|
||||
* Causes the invalidated cache state to be discarded.
|
||||
*
|
||||
* Note:
|
||||
@@ -527,7 +527,7 @@ DiscardInvalid()
|
||||
}
|
||||
|
||||
/*
|
||||
* RegisterInvalid
|
||||
* RegisterInvalid
|
||||
* Causes registration of invalidated state with other backends iff true.
|
||||
*
|
||||
* Note:
|
||||
@@ -559,7 +559,7 @@ RegisterInvalid(bool send)
|
||||
}
|
||||
|
||||
/*
|
||||
* RelationIdInvalidateHeapTuple
|
||||
* RelationIdInvalidateHeapTuple
|
||||
* Causes the given tuple in a relation to be invalidated.
|
||||
*
|
||||
* Note:
|
||||
|
||||
6
src/backend/utils/cache/rel.c
vendored
6
src/backend/utils/cache/rel.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/rel.c,v 1.4 1999/02/13 23:19:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/rel.c,v 1.5 1999/05/25 16:12:23 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -29,7 +29,7 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* RelationGetIndexStrategy
|
||||
* RelationGetIndexStrategy
|
||||
* Returns index strategy for a relation.
|
||||
*
|
||||
* Note:
|
||||
@@ -43,7 +43,7 @@ RelationGetIndexStrategy(Relation relation)
|
||||
}
|
||||
|
||||
/*
|
||||
* RelationSetIndexSupport
|
||||
* RelationSetIndexSupport
|
||||
* Sets index strategy and support info for a relation.
|
||||
*
|
||||
* Note:
|
||||
|
||||
39
src/backend/utils/cache/relcache.c
vendored
39
src/backend/utils/cache/relcache.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.61 1999/05/10 00:46:08 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.62 1999/05/25 16:12:23 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -396,7 +396,7 @@ scan_pg_rel_ind(RelationBuildDescInfo buildinfo)
|
||||
switch (buildinfo.infotype)
|
||||
{
|
||||
case INFO_RELID:
|
||||
return_tuple = ClassOidIndexScan(pg_class_desc,buildinfo.i.info_id);
|
||||
return_tuple = ClassOidIndexScan(pg_class_desc, buildinfo.i.info_id);
|
||||
break;
|
||||
|
||||
case INFO_RELNAME:
|
||||
@@ -707,20 +707,20 @@ RelationBuildRuleLock(Relation relation)
|
||||
|
||||
rule->event = (int) heap_getattr(pg_rewrite_tuple,
|
||||
Anum_pg_rewrite_ev_type, pg_rewrite_tupdesc,
|
||||
&isnull) - 48;
|
||||
&isnull) - 48;
|
||||
rule->attrno = (int) heap_getattr(pg_rewrite_tuple,
|
||||
Anum_pg_rewrite_ev_attr, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
&isnull);
|
||||
rule->isInstead = !!heap_getattr(pg_rewrite_tuple,
|
||||
Anum_pg_rewrite_is_instead, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
Anum_pg_rewrite_is_instead, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
|
||||
ruleaction = heap_getattr(pg_rewrite_tuple,
|
||||
Anum_pg_rewrite_ev_action, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
Anum_pg_rewrite_ev_action, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
rule_evqual_string = heap_getattr(pg_rewrite_tuple,
|
||||
Anum_pg_rewrite_ev_qual, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
Anum_pg_rewrite_ev_qual, pg_rewrite_tupdesc,
|
||||
&isnull);
|
||||
|
||||
ruleaction = PointerGetDatum(textout((struct varlena *) DatumGetPointer(ruleaction)));
|
||||
rule_evqual_string = PointerGetDatum(textout((struct varlena *) DatumGetPointer(rule_evqual_string)));
|
||||
@@ -851,9 +851,7 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo)
|
||||
* ----------------
|
||||
*/
|
||||
if (OidIsValid(relam))
|
||||
{
|
||||
relation->rd_am = (Form_pg_am) AccessMethodObjectIdGetForm(relam);
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* initialize the tuple descriptor (relation->rd_att).
|
||||
@@ -1331,13 +1329,13 @@ RelationForgetRelation(Oid rid)
|
||||
MemoryContext oldcxt;
|
||||
List *curr;
|
||||
List *prev = NIL;
|
||||
|
||||
|
||||
oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);
|
||||
|
||||
|
||||
foreach(curr, newlyCreatedRelns)
|
||||
{
|
||||
Relation reln = lfirst(curr);
|
||||
|
||||
|
||||
Assert(reln != NULL && reln->rd_myxactonly);
|
||||
if (RelationGetRelid(reln) == rid)
|
||||
break;
|
||||
@@ -1353,7 +1351,7 @@ RelationForgetRelation(Oid rid)
|
||||
pfree(curr);
|
||||
MemoryContextSwitchTo(oldcxt);
|
||||
}
|
||||
|
||||
|
||||
RelationFlushRelation(&relation, false);
|
||||
}
|
||||
}
|
||||
@@ -1378,6 +1376,7 @@ RelationIdInvalidateRelationCacheByRelationId(Oid relationId)
|
||||
*/
|
||||
if (PointerIsValid(relation) && !relation->rd_myxactonly)
|
||||
{
|
||||
|
||||
/*
|
||||
* The boolean onlyFlushReferenceCountZero in RelationFlushReln()
|
||||
* should be set to true when we are incrementing the command
|
||||
@@ -1484,8 +1483,8 @@ RelationRegisterRelation(Relation relation)
|
||||
|
||||
/*
|
||||
* we've just created the relation. It is invisible to anyone else
|
||||
* before the transaction is committed. Setting rd_myxactonly allows us
|
||||
* to use the local buffer manager for select/insert/etc before the
|
||||
* before the transaction is committed. Setting rd_myxactonly allows
|
||||
* us to use the local buffer manager for select/insert/etc before the
|
||||
* end of transaction. (We also need to keep track of relations
|
||||
* created during a transaction and does the necessary clean up at the
|
||||
* end of the transaction.) - ay 3/95
|
||||
@@ -1634,7 +1633,7 @@ AttrDefaultFetch(Relation relation)
|
||||
Relation adrel;
|
||||
Relation irel;
|
||||
ScanKeyData skey;
|
||||
HeapTupleData tuple;
|
||||
HeapTupleData tuple;
|
||||
Form_pg_attrdef adform;
|
||||
IndexScanDesc sd;
|
||||
RetrieveIndexResult indexRes;
|
||||
@@ -1722,7 +1721,7 @@ RelCheckFetch(Relation relation)
|
||||
Relation rcrel;
|
||||
Relation irel;
|
||||
ScanKeyData skey;
|
||||
HeapTupleData tuple;
|
||||
HeapTupleData tuple;
|
||||
IndexScanDesc sd;
|
||||
RetrieveIndexResult indexRes;
|
||||
Name rcname;
|
||||
|
||||
22
src/backend/utils/cache/syscache.c
vendored
22
src/backend/utils/cache/syscache.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.24 1999/02/13 23:19:45 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.25 1999/05/25 16:12:23 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* These routines allow the parser/planner/executor to perform
|
||||
@@ -421,11 +421,11 @@ InitCatalogCache()
|
||||
Assert(!PointerIsValid((Pointer) SysCache[cacheId]));
|
||||
|
||||
SysCache[cacheId] = InitSysCache(cacheinfo[cacheId].name,
|
||||
cacheinfo[cacheId].indname,
|
||||
cacheId,
|
||||
cacheinfo[cacheId].nkeys,
|
||||
cacheinfo[cacheId].key,
|
||||
cacheinfo[cacheId].iScanFunc);
|
||||
cacheinfo[cacheId].indname,
|
||||
cacheId,
|
||||
cacheinfo[cacheId].nkeys,
|
||||
cacheinfo[cacheId].key,
|
||||
cacheinfo[cacheId].iScanFunc);
|
||||
if (!PointerIsValid((char *) SysCache[cacheId]))
|
||||
{
|
||||
elog(ERROR,
|
||||
@@ -492,11 +492,11 @@ SearchSysCacheTuple(int cacheId,/* cache selection code */
|
||||
if (!PointerIsValid(SysCache[cacheId]))
|
||||
{
|
||||
SysCache[cacheId] = InitSysCache(cacheinfo[cacheId].name,
|
||||
cacheinfo[cacheId].indname,
|
||||
cacheId,
|
||||
cacheinfo[cacheId].nkeys,
|
||||
cacheinfo[cacheId].key,
|
||||
cacheinfo[cacheId].iScanFunc);
|
||||
cacheinfo[cacheId].indname,
|
||||
cacheId,
|
||||
cacheinfo[cacheId].nkeys,
|
||||
cacheinfo[cacheId].key,
|
||||
cacheinfo[cacheId].iScanFunc);
|
||||
if (!PointerIsValid(SysCache[cacheId]))
|
||||
elog(ERROR,
|
||||
"InitCatalogCache: Can't init cache %s(%d)",
|
||||
|
||||
34
src/backend/utils/cache/temprel.c
vendored
34
src/backend/utils/cache/temprel.c
vendored
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.2 1999/02/13 23:19:45 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.3 1999/05/25 16:12:24 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -47,16 +47,16 @@ static List *temp_rels = NIL;
|
||||
|
||||
typedef struct TempTable
|
||||
{
|
||||
char *user_relname;
|
||||
char *user_relname;
|
||||
HeapTuple pg_class_tuple;
|
||||
} TempTable;
|
||||
} TempTable;
|
||||
|
||||
|
||||
void
|
||||
create_temp_relation(char *relname, HeapTuple pg_class_tuple)
|
||||
{
|
||||
MemoryContext oldcxt;
|
||||
TempTable *temp_rel;
|
||||
TempTable *temp_rel;
|
||||
|
||||
oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);
|
||||
|
||||
@@ -65,7 +65,7 @@ create_temp_relation(char *relname, HeapTuple pg_class_tuple)
|
||||
|
||||
/* save user-supplied name */
|
||||
strcpy(temp_rel->user_relname, relname);
|
||||
|
||||
|
||||
temp_rel->pg_class_tuple = heap_copytuple(pg_class_tuple);
|
||||
|
||||
temp_rels = lcons(temp_rel, temp_rels);
|
||||
@@ -76,24 +76,25 @@ create_temp_relation(char *relname, HeapTuple pg_class_tuple)
|
||||
void
|
||||
remove_all_temp_relations(void)
|
||||
{
|
||||
List *l, *next;
|
||||
List *l,
|
||||
*next;
|
||||
|
||||
l = temp_rels;
|
||||
while (l != NIL)
|
||||
{
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
Form_pg_class classtuple;
|
||||
|
||||
classtuple = (Form_pg_class)GETSTRUCT(temp_rel->pg_class_tuple);
|
||||
classtuple = (Form_pg_class) GETSTRUCT(temp_rel->pg_class_tuple);
|
||||
|
||||
next = lnext(l); /* do this first, l is deallocated */
|
||||
next = lnext(l); /* do this first, l is deallocated */
|
||||
|
||||
if (classtuple->relkind != RELKIND_INDEX)
|
||||
{
|
||||
char relname[NAMEDATALEN];
|
||||
char relname[NAMEDATALEN];
|
||||
|
||||
/* safe from deallocation */
|
||||
strcpy(relname, temp_rel->user_relname);
|
||||
strcpy(relname, temp_rel->user_relname);
|
||||
heap_destroy_with_catalog(relname);
|
||||
}
|
||||
else
|
||||
@@ -109,15 +110,16 @@ remove_temp_relation(Oid relid)
|
||||
{
|
||||
|
||||
MemoryContext oldcxt;
|
||||
List *l, *prev;
|
||||
|
||||
List *l,
|
||||
*prev;
|
||||
|
||||
oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);
|
||||
|
||||
prev = NIL;
|
||||
l = temp_rels;
|
||||
while (l != NIL)
|
||||
{
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
|
||||
if (temp_rel->pg_class_tuple->t_data->t_oid == relid)
|
||||
{
|
||||
@@ -152,11 +154,11 @@ remove_temp_relation(Oid relid)
|
||||
HeapTuple
|
||||
get_temp_rel_by_name(char *user_relname)
|
||||
{
|
||||
List *l;
|
||||
List *l;
|
||||
|
||||
foreach(l, temp_rels)
|
||||
{
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
TempTable *temp_rel = lfirst(l);
|
||||
|
||||
if (strcmp(temp_rel->user_relname, user_relname) == 0)
|
||||
return temp_rel->pg_class_tuple;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.44 1999/05/10 00:46:11 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.45 1999/05/25 16:12:24 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -55,7 +55,7 @@ static int Err_file = -1;
|
||||
static int ElogDebugIndentLevel = 0;
|
||||
|
||||
/*
|
||||
* elog
|
||||
* elog
|
||||
* Old error logging function.
|
||||
*/
|
||||
void
|
||||
@@ -167,7 +167,7 @@ elog(int lev, const char *fmt,...)
|
||||
* front-end program, write to it first. This is important because
|
||||
* there's a bug in the socket code on ultrix. If the front end has
|
||||
* gone away (so the channel to it has been closed at the other end),
|
||||
* then writing here can cause this backend to exit without warning
|
||||
* then writing here can cause this backend to exit without warning
|
||||
* that is, write() does an exit(). In this case, our only hope of
|
||||
* finding out what's going on is if Err_file was set to some disk
|
||||
* log. This is a major pain.
|
||||
@@ -190,26 +190,32 @@ elog(int lev, const char *fmt,...)
|
||||
if (IsUnderPostmaster && lev > DEBUG)
|
||||
{
|
||||
/* notices are not errors, handle 'em differently */
|
||||
char msgtype;
|
||||
char msgtype;
|
||||
|
||||
if (lev == NOTICE)
|
||||
msgtype = 'N';
|
||||
else
|
||||
{
|
||||
/* Abort any COPY OUT in progress when an error is detected.
|
||||
* This hack is necessary because of poor design of copy protocol.
|
||||
|
||||
/*
|
||||
* Abort any COPY OUT in progress when an error is detected.
|
||||
* This hack is necessary because of poor design of copy
|
||||
* protocol.
|
||||
*/
|
||||
pq_endcopyout(true);
|
||||
msgtype = 'E';
|
||||
}
|
||||
/* exclude the timestamp from msg sent to frontend */
|
||||
pq_puttextmessage(msgtype, line + TIMESTAMP_SIZE);
|
||||
|
||||
/*
|
||||
* This flush is normally not necessary, since postgres.c will
|
||||
* flush out waiting data when control returns to the main loop.
|
||||
* But it seems best to leave it here, so that the client has some
|
||||
* clue what happened if the backend dies before getting back to the
|
||||
* main loop ... error/notice messages should not be a performance-
|
||||
* critical path anyway, so an extra flush won't hurt much ...
|
||||
* clue what happened if the backend dies before getting back to
|
||||
* the main loop ... error/notice messages should not be a
|
||||
* performance- critical path anyway, so an extra flush won't hurt
|
||||
* much ...
|
||||
*/
|
||||
pq_flush();
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.24 1999/02/13 23:19:48 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.25 1999/05/25 16:12:26 momjian Exp $
|
||||
*
|
||||
* NOTE
|
||||
* XXX this code needs improvement--check for state violations and
|
||||
@@ -48,7 +48,7 @@ extern char *ProgramName;
|
||||
*/
|
||||
|
||||
/*
|
||||
* EnableExceptionHandling
|
||||
* EnableExceptionHandling
|
||||
* Enables/disables the exception handling system.
|
||||
*
|
||||
* Note:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.5 1999/02/13 23:19:48 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.6 1999/05/25 16:12:26 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -22,19 +22,19 @@
|
||||
|
||||
|
||||
/*
|
||||
* FailedAssertion
|
||||
* FailedAssertion
|
||||
* Indicates an Assert(...) failed.
|
||||
*/
|
||||
Exception FailedAssertion = {"Failed Assertion"};
|
||||
|
||||
/*
|
||||
* BadState
|
||||
* BadState
|
||||
* Indicates a function call request is inconsistent with module state.
|
||||
*/
|
||||
Exception BadState = {"Bad State for Function Call"};
|
||||
|
||||
/*
|
||||
* BadArg
|
||||
* BadArg
|
||||
* Indicates a function call argument or arguments is out-of-bounds.
|
||||
*/
|
||||
Exception BadArg = {"Bad Argument to Function Call"};
|
||||
@@ -44,19 +44,19 @@ Exception BadArg = {"Bad Argument to Function Call"};
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* BadAllocSize
|
||||
* BadAllocSize
|
||||
* Indicates that an allocation request is of unreasonable size.
|
||||
*/
|
||||
Exception BadAllocSize = {"Too Large Allocation Request"};
|
||||
|
||||
/*
|
||||
* ExhaustedMemory
|
||||
* ExhaustedMemory
|
||||
* Indicates an dynamic memory allocation failed.
|
||||
*/
|
||||
Exception ExhaustedMemory = {"Memory Allocation Failed"};
|
||||
|
||||
/*
|
||||
* Unimplemented
|
||||
* Unimplemented
|
||||
* Indicates a function call request requires unimplemented code.
|
||||
*/
|
||||
Exception Unimplemented = {"Unimplemented Functionality"};
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/format.c,v 1.10 1999/02/13 23:19:49 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/format.c,v 1.11 1999/05/25 16:12:26 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -29,6 +29,7 @@ char *
|
||||
form(const char *fmt,...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
vsnprintf(FormBuf, FormMaxSize - 1, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.25 1999/05/22 19:49:41 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.26 1999/05/25 16:12:27 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -237,14 +237,14 @@ void
|
||||
load_file(char *filename)
|
||||
{
|
||||
DynamicFileList *file_scanner,
|
||||
*p;
|
||||
*p;
|
||||
struct stat stat_buf;
|
||||
int done = 0;
|
||||
|
||||
/*
|
||||
* We need to do stat() in order to determine whether this is the
|
||||
* same file as a previously loaded file; it's also handy so as to
|
||||
* give a good error message if bogus file name given.
|
||||
* We need to do stat() in order to determine whether this is the same
|
||||
* file as a previously loaded file; it's also handy so as to give a
|
||||
* good error message if bogus file name given.
|
||||
*/
|
||||
if (stat(filename, &stat_buf) == -1)
|
||||
elog(ERROR, "LOAD: could not open file '%s': %m", filename);
|
||||
@@ -292,4 +292,5 @@ trigger_dynamic(char *filename, char *funcname)
|
||||
|
||||
return trigger_fn;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.27 1999/05/10 04:02:05 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.28 1999/05/25 16:12:28 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -81,8 +81,10 @@ fmgr_pl(char *arg0,...)
|
||||
static char *
|
||||
fmgr_untrusted(char *arg0,...)
|
||||
{
|
||||
/* Currently these are unsupported. Someday we might do something like
|
||||
* forking a subprocess to execute 'em.
|
||||
|
||||
/*
|
||||
* Currently these are unsupported. Someday we might do something
|
||||
* like forking a subprocess to execute 'em.
|
||||
*/
|
||||
elog(ERROR, "Untrusted functions not supported.");
|
||||
return NULL; /* keep compiler happy */
|
||||
@@ -96,9 +98,11 @@ fmgr_untrusted(char *arg0,...)
|
||||
static char *
|
||||
fmgr_sql(char *arg0,...)
|
||||
{
|
||||
|
||||
/*
|
||||
* XXX It'd be really nice to support SQL functions anywhere that builtins
|
||||
* are supported. What would we have to do? What pitfalls are there?
|
||||
* XXX It'd be really nice to support SQL functions anywhere that
|
||||
* builtins are supported. What would we have to do? What pitfalls
|
||||
* are there?
|
||||
*/
|
||||
elog(ERROR, "SQL-language function not supported in this context.");
|
||||
return NULL; /* keep compiler happy */
|
||||
@@ -215,14 +219,18 @@ fmgr_info(Oid procedureId, FmgrInfo *finfo)
|
||||
|
||||
if ((fcp = fmgr_isbuiltin(procedureId)) != NULL)
|
||||
{
|
||||
/* Fast path for builtin functions: don't bother consulting pg_proc */
|
||||
|
||||
/*
|
||||
* Fast path for builtin functions: don't bother consulting
|
||||
* pg_proc
|
||||
*/
|
||||
finfo->fn_addr = fcp->func;
|
||||
finfo->fn_nargs = fcp->nargs;
|
||||
}
|
||||
else
|
||||
{
|
||||
procedureTuple = SearchSysCacheTuple(PROOID,
|
||||
ObjectIdGetDatum(procedureId),
|
||||
ObjectIdGetDatum(procedureId),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(procedureTuple))
|
||||
{
|
||||
@@ -240,14 +248,16 @@ fmgr_info(Oid procedureId, FmgrInfo *finfo)
|
||||
switch (language)
|
||||
{
|
||||
case INTERNALlanguageId:
|
||||
|
||||
/*
|
||||
* For an ordinary builtin function, we should never get here
|
||||
* because the isbuiltin() search above will have succeeded.
|
||||
* However, if the user has done a CREATE FUNCTION to create
|
||||
* an alias for a builtin function, we end up here. In that
|
||||
* case we have to look up the function by name. The name
|
||||
* of the internal function is stored in prosrc (it doesn't
|
||||
* have to be the same as the name of the alias!)
|
||||
* For an ordinary builtin function, we should never get
|
||||
* here because the isbuiltin() search above will have
|
||||
* succeeded. However, if the user has done a CREATE
|
||||
* FUNCTION to create an alias for a builtin function, we
|
||||
* end up here. In that case we have to look up the
|
||||
* function by name. The name of the internal function is
|
||||
* stored in prosrc (it doesn't have to be the same as the
|
||||
* name of the alias!)
|
||||
*/
|
||||
prosrc = textout(&(procedureStruct->prosrc));
|
||||
finfo->fn_addr = fmgr_lookupByName(prosrc);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.21 1999/03/07 23:03:32 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.22 1999/05/25 16:12:28 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -175,8 +175,10 @@ hash_create(int nelem, HASHCTL *info, int flags)
|
||||
|
||||
if (flags & HASH_SHARED_MEM)
|
||||
{
|
||||
/* ctl structure is preallocated for shared memory tables.
|
||||
* Note that HASH_DIRSIZE had better be set as well.
|
||||
|
||||
/*
|
||||
* ctl structure is preallocated for shared memory tables. Note
|
||||
* that HASH_DIRSIZE had better be set as well.
|
||||
*/
|
||||
|
||||
hashp->hctl = (HHDR *) info->hctl;
|
||||
@@ -296,9 +298,9 @@ init_htab(HTAB *hashp, int nelem)
|
||||
hctl = hashp->hctl;
|
||||
|
||||
/*
|
||||
* Divide number of elements by the fill factor to determine a
|
||||
* desired number of buckets. Allocate space for the next greater
|
||||
* power of two number of buckets
|
||||
* Divide number of elements by the fill factor to determine a desired
|
||||
* number of buckets. Allocate space for the next greater power of
|
||||
* two number of buckets
|
||||
*/
|
||||
nelem = (nelem - 1) / hctl->ffactor + 1;
|
||||
|
||||
@@ -308,14 +310,15 @@ init_htab(HTAB *hashp, int nelem)
|
||||
hctl->high_mask = (nbuckets << 1) - 1;
|
||||
|
||||
/*
|
||||
* Figure number of directory segments needed, round up to a power of 2
|
||||
* Figure number of directory segments needed, round up to a power of
|
||||
* 2
|
||||
*/
|
||||
nsegs = (nbuckets - 1) / hctl->ssize + 1;
|
||||
nsegs = 1 << my_log2(nsegs);
|
||||
|
||||
/*
|
||||
* Make sure directory is big enough.
|
||||
* If pre-allocated directory is too small, choke (caller screwed up).
|
||||
* Make sure directory is big enough. If pre-allocated directory is
|
||||
* too small, choke (caller screwed up).
|
||||
*/
|
||||
if (nsegs > hctl->dsize)
|
||||
{
|
||||
@@ -371,12 +374,12 @@ init_htab(HTAB *hashp, int nelem)
|
||||
long
|
||||
hash_estimate_size(long num_entries, long keysize, long datasize)
|
||||
{
|
||||
long size = 0;
|
||||
long nBuckets,
|
||||
nSegments,
|
||||
nDirEntries,
|
||||
nRecordAllocs,
|
||||
recordSize;
|
||||
long size = 0;
|
||||
long nBuckets,
|
||||
nSegments,
|
||||
nDirEntries,
|
||||
nRecordAllocs,
|
||||
recordSize;
|
||||
|
||||
/* estimate number of buckets wanted */
|
||||
nBuckets = 1L << my_log2((num_entries - 1) / DEF_FFACTOR + 1);
|
||||
@@ -388,7 +391,7 @@ hash_estimate_size(long num_entries, long keysize, long datasize)
|
||||
nDirEntries <<= 1; /* dir_alloc doubles dsize at each call */
|
||||
|
||||
/* fixed control info */
|
||||
size += MAXALIGN(sizeof(HHDR)); /* but not HTAB, per above */
|
||||
size += MAXALIGN(sizeof(HHDR)); /* but not HTAB, per above */
|
||||
/* directory */
|
||||
size += MAXALIGN(nDirEntries * sizeof(SEG_OFFSET));
|
||||
/* segments */
|
||||
@@ -665,8 +668,10 @@ hash_search(HTAB *hashp,
|
||||
*/
|
||||
if (++hctl->nkeys / (hctl->max_bucket + 1) > hctl->ffactor)
|
||||
{
|
||||
/* NOTE: failure to expand table is not a fatal error,
|
||||
* it just means we have to run at higher fill factor than we wanted.
|
||||
|
||||
/*
|
||||
* NOTE: failure to expand table is not a fatal error, it just
|
||||
* means we have to run at higher fill factor than we wanted.
|
||||
*/
|
||||
expand_table(hashp);
|
||||
}
|
||||
@@ -778,7 +783,7 @@ expand_table(HTAB *hashp)
|
||||
{
|
||||
/* Allocate new segment if necessary -- could fail if dir full */
|
||||
if (new_segnum >= hctl->dsize)
|
||||
if (! dir_realloc(hashp))
|
||||
if (!dir_realloc(hashp))
|
||||
return 0;
|
||||
if (!(hashp->dir[new_segnum] = seg_alloc(hashp)))
|
||||
return 0;
|
||||
@@ -872,7 +877,7 @@ seg_alloc(HTAB *hashp)
|
||||
SEG_OFFSET segOffset;
|
||||
|
||||
segp = (SEGMENT) hashp->alloc((unsigned long)
|
||||
sizeof(BUCKET_INDEX) * hashp->hctl->ssize);
|
||||
sizeof(BUCKET_INDEX) * hashp->hctl->ssize);
|
||||
|
||||
if (!segp)
|
||||
return 0;
|
||||
@@ -917,8 +922,9 @@ bucket_alloc(HTAB *hashp)
|
||||
lastIndex = hashp->hctl->freeBucketIndex;
|
||||
hashp->hctl->freeBucketIndex = tmpIndex;
|
||||
|
||||
/* initialize each bucket to point to the one behind it.
|
||||
* NOTE: loop sets last bucket incorrectly; we fix below.
|
||||
/*
|
||||
* initialize each bucket to point to the one behind it. NOTE: loop
|
||||
* sets last bucket incorrectly; we fix below.
|
||||
*/
|
||||
for (i = 0; i < BUCKET_ALLOC_INCR; i++)
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/enbl.c,v 1.6 1999/02/13 23:19:59 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/enbl.c,v 1.7 1999/05/25 16:12:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -15,7 +15,7 @@
|
||||
#include "utils/module.h" /* where the declarations go */
|
||||
|
||||
/*
|
||||
* BypassEnable
|
||||
* BypassEnable
|
||||
* False iff enable/disable processing is required given on and "*countP."
|
||||
*
|
||||
* Note:
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* findbe.c
|
||||
* findbe.c
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.13 1999/02/13 23:20:00 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.14 1999/05/25 16:12:33 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.29 1999/05/22 17:47:46 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.30 1999/05/25 16:12:34 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Globals used all over the place should be declared here and not
|
||||
@@ -46,6 +46,7 @@ struct Port *MyProcPort;
|
||||
long MyCancelKey;
|
||||
|
||||
char *DataDir = NULL;
|
||||
|
||||
/*
|
||||
* The PGDATA directory user says to use, or defaults to via environment
|
||||
* variable. NULL if no option given and no environment variable set
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.28 1999/05/22 17:47:46 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.29 1999/05/25 16:12:35 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -40,7 +40,7 @@
|
||||
#include "storage/ipc.h" /* for proc_exit */
|
||||
|
||||
/*
|
||||
* EnableAbortEnvVarName
|
||||
* EnableAbortEnvVarName
|
||||
* Enables system abort iff set to a non-empty string in environment.
|
||||
*/
|
||||
#define EnableAbortEnvVarName "POSTGRESABORT"
|
||||
@@ -69,7 +69,7 @@ unsigned char RecodeBackTable[128];
|
||||
*/
|
||||
|
||||
/*
|
||||
* ExitPostgres
|
||||
* ExitPostgres
|
||||
* Exit POSTGRES with a status code.
|
||||
*
|
||||
* Note:
|
||||
@@ -89,7 +89,7 @@ ExitPostgres(ExitStatus status)
|
||||
}
|
||||
|
||||
/*
|
||||
* AbortPostgres
|
||||
* AbortPostgres
|
||||
* Abort POSTGRES dumping core.
|
||||
*
|
||||
* Note:
|
||||
@@ -138,6 +138,7 @@ StatusPostmasterExit(int status)
|
||||
/* someday, do some real cleanup and then call the LISP exit */
|
||||
proc_exit(status);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -149,7 +150,7 @@ static ProcessingMode Mode = NoProcessing;
|
||||
|
||||
#ifdef NOT_USED
|
||||
/*
|
||||
* IsNoProcessingMode
|
||||
* IsNoProcessingMode
|
||||
* True iff processing mode is NoProcessing.
|
||||
*/
|
||||
bool
|
||||
@@ -157,10 +158,11 @@ IsNoProcessingMode()
|
||||
{
|
||||
return (bool) (Mode == NoProcessing);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* IsBootstrapProcessingMode
|
||||
* IsBootstrapProcessingMode
|
||||
* True iff processing mode is BootstrapProcessing.
|
||||
*/
|
||||
bool
|
||||
@@ -170,7 +172,7 @@ IsBootstrapProcessingMode()
|
||||
}
|
||||
|
||||
/*
|
||||
* IsInitProcessingMode
|
||||
* IsInitProcessingMode
|
||||
* True iff processing mode is InitProcessing.
|
||||
*/
|
||||
bool
|
||||
@@ -180,7 +182,7 @@ IsInitProcessingMode()
|
||||
}
|
||||
|
||||
/*
|
||||
* IsNormalProcessingMode
|
||||
* IsNormalProcessingMode
|
||||
* True iff processing mode is NormalProcessing.
|
||||
*/
|
||||
bool
|
||||
@@ -190,7 +192,7 @@ IsNormalProcessingMode()
|
||||
}
|
||||
|
||||
/*
|
||||
* SetProcessingMode
|
||||
* SetProcessingMode
|
||||
* Sets mode of processing as specified.
|
||||
*
|
||||
* Exceptions:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.39 1999/02/22 19:55:43 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.40 1999/05/25 16:12:36 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* InitPostgres() is the function called from PostgresMain
|
||||
@@ -143,7 +143,7 @@ InitMyDatabaseInfo(char *name)
|
||||
|
||||
|
||||
/*
|
||||
* DoChdirAndInitDatabaseNameAndPath
|
||||
* DoChdirAndInitDatabaseNameAndPath
|
||||
* Set current directory to the database directory for the database
|
||||
* named <name>.
|
||||
* Also set global variables DatabasePath and DatabaseName to those
|
||||
@@ -415,7 +415,7 @@ InitStdio()
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
* InitPostgres
|
||||
* InitPostgres
|
||||
* Initialize POSTGRES.
|
||||
*
|
||||
* Note:
|
||||
|
||||
@@ -4,63 +4,69 @@
|
||||
*
|
||||
* Tatsuo Ishii
|
||||
*
|
||||
* $Id: alt.c,v 1.1 1999/03/24 07:01:36 ishii Exp $
|
||||
* $Id: alt.c,v 1.2 1999/05/25 16:12:38 momjian Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
char koitab[128],alttab[128];
|
||||
char buf[4096];
|
||||
int koi,alt;
|
||||
int i;
|
||||
char koitab[128],
|
||||
alttab[128];
|
||||
char buf[4096];
|
||||
int koi,
|
||||
alt;
|
||||
|
||||
for (i=0;i<128;i++) {
|
||||
koitab[i] = alttab[i] = 0;
|
||||
}
|
||||
for (i = 0; i < 128; i++)
|
||||
koitab[i] = alttab[i] = 0;
|
||||
|
||||
while (fgets(buf,sizeof(buf),stdin) != NULL) {
|
||||
if (*buf == '#') {
|
||||
continue;
|
||||
}
|
||||
sscanf(buf,"%d %d",&koi,&alt);
|
||||
if (koi < 128 || koi > 255 || alt < 128 || alt > 255) {
|
||||
fprintf(stderr,"invalid value %d\n",koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi-128] = alt;
|
||||
alttab[alt-128] = koi;
|
||||
}
|
||||
while (fgets(buf, sizeof(buf), stdin) != NULL)
|
||||
{
|
||||
if (*buf == '#')
|
||||
continue;
|
||||
sscanf(buf, "%d %d", &koi, &alt);
|
||||
if (koi < 128 || koi > 255 || alt < 128 || alt > 255)
|
||||
{
|
||||
fprintf(stderr, "invalid value %d\n", koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi - 128] = alt;
|
||||
alttab[alt - 128] = koi;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
printf("static char koi2alt[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
i = 0;
|
||||
printf("static char koi2alt[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
i = 0;
|
||||
printf("static char alt2koi[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",alttab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
|
||||
i = 0;
|
||||
printf("static char alt2koi[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", alttab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
}
|
||||
|
||||
@@ -4,344 +4,372 @@
|
||||
* This program is partially copied from lv(Multilingual file viewer)
|
||||
* and slightly modified. lv is written and copyrighted by NARITA Tomio
|
||||
* (nrt@web.ad.jp).
|
||||
*
|
||||
*
|
||||
* 1999/1/15 Tatsuo Ishii
|
||||
*
|
||||
* $Id: big5.c,v 1.1 1999/02/02 18:51:22 momjian Exp $
|
||||
* $Id: big5.c,v 1.2 1999/05/25 16:12:40 momjian Exp $
|
||||
*/
|
||||
|
||||
#include "mb/pg_wchar.h"
|
||||
|
||||
typedef struct {
|
||||
unsigned short code, peer;
|
||||
} codes_t;
|
||||
typedef struct
|
||||
{
|
||||
unsigned short code,
|
||||
peer;
|
||||
} codes_t;
|
||||
|
||||
/* map Big5 Level 1 to CNS 11643-1992 Plane 1 */
|
||||
static codes_t big5Level1ToCnsPlane1[ 25 ] = { /* range */
|
||||
{ 0xA140, 0x2121 },
|
||||
{ 0xA1F6, 0x2258 },
|
||||
{ 0xA1F7, 0x2257 },
|
||||
{ 0xA1F8, 0x2259 },
|
||||
{ 0xA2AF, 0x2421 },
|
||||
{ 0xA3C0, 0x4221 },
|
||||
{ 0xa3e1, 0x0000 },
|
||||
{ 0xA440, 0x4421 },
|
||||
{ 0xACFE, 0x5753 },
|
||||
{ 0xacff, 0x0000 },
|
||||
{ 0xAD40, 0x5323 },
|
||||
{ 0xAFD0, 0x5754 },
|
||||
{ 0xBBC8, 0x6B51 },
|
||||
{ 0xBE52, 0x6B50 },
|
||||
{ 0xBE53, 0x6F5C },
|
||||
{ 0xC1AB, 0x7536 },
|
||||
{ 0xC2CB, 0x7535 },
|
||||
{ 0xC2CC, 0x7737 },
|
||||
{ 0xC361, 0x782E },
|
||||
{ 0xC3B9, 0x7865 },
|
||||
{ 0xC3BA, 0x7864 },
|
||||
{ 0xC3BB, 0x7866 },
|
||||
{ 0xC456, 0x782D },
|
||||
{ 0xC457, 0x7962 },
|
||||
{ 0xc67f, 0x0000 }
|
||||
static codes_t big5Level1ToCnsPlane1[25] = { /* range */
|
||||
{0xA140, 0x2121},
|
||||
{0xA1F6, 0x2258},
|
||||
{0xA1F7, 0x2257},
|
||||
{0xA1F8, 0x2259},
|
||||
{0xA2AF, 0x2421},
|
||||
{0xA3C0, 0x4221},
|
||||
{0xa3e1, 0x0000},
|
||||
{0xA440, 0x4421},
|
||||
{0xACFE, 0x5753},
|
||||
{0xacff, 0x0000},
|
||||
{0xAD40, 0x5323},
|
||||
{0xAFD0, 0x5754},
|
||||
{0xBBC8, 0x6B51},
|
||||
{0xBE52, 0x6B50},
|
||||
{0xBE53, 0x6F5C},
|
||||
{0xC1AB, 0x7536},
|
||||
{0xC2CB, 0x7535},
|
||||
{0xC2CC, 0x7737},
|
||||
{0xC361, 0x782E},
|
||||
{0xC3B9, 0x7865},
|
||||
{0xC3BA, 0x7864},
|
||||
{0xC3BB, 0x7866},
|
||||
{0xC456, 0x782D},
|
||||
{0xC457, 0x7962},
|
||||
{0xc67f, 0x0000}
|
||||
};
|
||||
|
||||
/* map CNS 11643-1992 Plane 1 to Big5 Level 1 */
|
||||
static codes_t cnsPlane1ToBig5Level1[ 26 ] = { /* range */
|
||||
{ 0x2121, 0xA140 },
|
||||
{ 0x2257, 0xA1F7 },
|
||||
{ 0x2258, 0xA1F6 },
|
||||
{ 0x2259, 0xA1F8 },
|
||||
{ 0x234f, 0x0000 },
|
||||
{ 0x2421, 0xA2AF },
|
||||
{ 0x2571, 0x0000 },
|
||||
{ 0x4221, 0xA3C0 },
|
||||
{ 0x4242, 0x0000 },
|
||||
{ 0x4421, 0xA440 },
|
||||
{ 0x5323, 0xAD40 },
|
||||
{ 0x5753, 0xACFE },
|
||||
{ 0x5754, 0xAFD0 },
|
||||
{ 0x6B50, 0xBE52 },
|
||||
{ 0x6B51, 0xBBC8 },
|
||||
{ 0x6F5C, 0xBE53 },
|
||||
{ 0x7535, 0xC2CB },
|
||||
{ 0x7536, 0xC1AB },
|
||||
{ 0x7737, 0xC2CC },
|
||||
{ 0x782D, 0xC456 },
|
||||
{ 0x782E, 0xC361 },
|
||||
{ 0x7864, 0xC3BA },
|
||||
{ 0x7865, 0xC3B9 },
|
||||
{ 0x7866, 0xC3BB },
|
||||
{ 0x7962, 0xC457 },
|
||||
{ 0x7d4c, 0x0000 }
|
||||
static codes_t cnsPlane1ToBig5Level1[26] = { /* range */
|
||||
{0x2121, 0xA140},
|
||||
{0x2257, 0xA1F7},
|
||||
{0x2258, 0xA1F6},
|
||||
{0x2259, 0xA1F8},
|
||||
{0x234f, 0x0000},
|
||||
{0x2421, 0xA2AF},
|
||||
{0x2571, 0x0000},
|
||||
{0x4221, 0xA3C0},
|
||||
{0x4242, 0x0000},
|
||||
{0x4421, 0xA440},
|
||||
{0x5323, 0xAD40},
|
||||
{0x5753, 0xACFE},
|
||||
{0x5754, 0xAFD0},
|
||||
{0x6B50, 0xBE52},
|
||||
{0x6B51, 0xBBC8},
|
||||
{0x6F5C, 0xBE53},
|
||||
{0x7535, 0xC2CB},
|
||||
{0x7536, 0xC1AB},
|
||||
{0x7737, 0xC2CC},
|
||||
{0x782D, 0xC456},
|
||||
{0x782E, 0xC361},
|
||||
{0x7864, 0xC3BA},
|
||||
{0x7865, 0xC3B9},
|
||||
{0x7866, 0xC3BB},
|
||||
{0x7962, 0xC457},
|
||||
{0x7d4c, 0x0000}
|
||||
};
|
||||
|
||||
/* map Big5 Level 2 to CNS 11643-1992 Plane 2 */
|
||||
static codes_t big5Level2ToCnsPlane2[ 48 ] = { /* range */
|
||||
{ 0xC940, 0x2121 },
|
||||
{ 0xc94a, 0x0000 },
|
||||
{ 0xC94B, 0x212B },
|
||||
{ 0xC96C, 0x214D },
|
||||
{ 0xC9BE, 0x214C },
|
||||
{ 0xC9BF, 0x217D },
|
||||
{ 0xC9ED, 0x224E },
|
||||
{ 0xCAF7, 0x224D },
|
||||
{ 0xCAF8, 0x2439 },
|
||||
{ 0xD77A, 0x3F6A },
|
||||
{ 0xD77B, 0x387E },
|
||||
{ 0xDBA7, 0x3F6B },
|
||||
{ 0xDDFC, 0x4176 },
|
||||
{ 0xDDFD, 0x4424 },
|
||||
{ 0xE8A3, 0x554C },
|
||||
{ 0xE976, 0x5723 },
|
||||
{ 0xEB5B, 0x5A29 },
|
||||
{ 0xEBF1, 0x554B },
|
||||
{ 0xEBF2, 0x5B3F },
|
||||
{ 0xECDE, 0x5722 },
|
||||
{ 0xECDF, 0x5C6A },
|
||||
{ 0xEDAA, 0x5D75 },
|
||||
{ 0xEEEB, 0x642F },
|
||||
{ 0xEEEC, 0x6039 },
|
||||
{ 0xF056, 0x5D74 },
|
||||
{ 0xF057, 0x6243 },
|
||||
{ 0xF0CB, 0x5A28 },
|
||||
{ 0xF0CC, 0x6337 },
|
||||
{ 0xF163, 0x6430 },
|
||||
{ 0xF16B, 0x6761 },
|
||||
{ 0xF16C, 0x6438 },
|
||||
{ 0xF268, 0x6934 },
|
||||
{ 0xF269, 0x6573 },
|
||||
{ 0xF2C3, 0x664E },
|
||||
{ 0xF375, 0x6762 },
|
||||
{ 0xF466, 0x6935 },
|
||||
{ 0xF4B5, 0x664D },
|
||||
{ 0xF4B6, 0x6962 },
|
||||
{ 0xF4FD, 0x6A4C },
|
||||
{ 0xF663, 0x6A4B },
|
||||
{ 0xF664, 0x6C52 },
|
||||
{ 0xF977, 0x7167 },
|
||||
{ 0xF9C4, 0x7166 },
|
||||
{ 0xF9C5, 0x7234 },
|
||||
{ 0xF9C6, 0x7240 },
|
||||
{ 0xF9C7, 0x7235 },
|
||||
{ 0xF9D2, 0x7241 },
|
||||
{ 0xf9d6, 0x0000 }
|
||||
static codes_t big5Level2ToCnsPlane2[48] = { /* range */
|
||||
{0xC940, 0x2121},
|
||||
{0xc94a, 0x0000},
|
||||
{0xC94B, 0x212B},
|
||||
{0xC96C, 0x214D},
|
||||
{0xC9BE, 0x214C},
|
||||
{0xC9BF, 0x217D},
|
||||
{0xC9ED, 0x224E},
|
||||
{0xCAF7, 0x224D},
|
||||
{0xCAF8, 0x2439},
|
||||
{0xD77A, 0x3F6A},
|
||||
{0xD77B, 0x387E},
|
||||
{0xDBA7, 0x3F6B},
|
||||
{0xDDFC, 0x4176},
|
||||
{0xDDFD, 0x4424},
|
||||
{0xE8A3, 0x554C},
|
||||
{0xE976, 0x5723},
|
||||
{0xEB5B, 0x5A29},
|
||||
{0xEBF1, 0x554B},
|
||||
{0xEBF2, 0x5B3F},
|
||||
{0xECDE, 0x5722},
|
||||
{0xECDF, 0x5C6A},
|
||||
{0xEDAA, 0x5D75},
|
||||
{0xEEEB, 0x642F},
|
||||
{0xEEEC, 0x6039},
|
||||
{0xF056, 0x5D74},
|
||||
{0xF057, 0x6243},
|
||||
{0xF0CB, 0x5A28},
|
||||
{0xF0CC, 0x6337},
|
||||
{0xF163, 0x6430},
|
||||
{0xF16B, 0x6761},
|
||||
{0xF16C, 0x6438},
|
||||
{0xF268, 0x6934},
|
||||
{0xF269, 0x6573},
|
||||
{0xF2C3, 0x664E},
|
||||
{0xF375, 0x6762},
|
||||
{0xF466, 0x6935},
|
||||
{0xF4B5, 0x664D},
|
||||
{0xF4B6, 0x6962},
|
||||
{0xF4FD, 0x6A4C},
|
||||
{0xF663, 0x6A4B},
|
||||
{0xF664, 0x6C52},
|
||||
{0xF977, 0x7167},
|
||||
{0xF9C4, 0x7166},
|
||||
{0xF9C5, 0x7234},
|
||||
{0xF9C6, 0x7240},
|
||||
{0xF9C7, 0x7235},
|
||||
{0xF9D2, 0x7241},
|
||||
{0xf9d6, 0x0000}
|
||||
};
|
||||
|
||||
/* map CNS 11643-1992 Plane 2 to Big5 Level 2 */
|
||||
static codes_t cnsPlane2ToBig5Level2[ 49 ] = { /* range */
|
||||
{ 0x2121, 0xC940 },
|
||||
{ 0x212B, 0xC94B },
|
||||
{ 0x214C, 0xC9BE },
|
||||
{ 0x214D, 0xC96C },
|
||||
{ 0x217D, 0xC9BF },
|
||||
{ 0x224D, 0xCAF7 },
|
||||
{ 0x224E, 0xC9ED },
|
||||
{ 0x2439, 0xCAF8 },
|
||||
{ 0x387E, 0xD77B },
|
||||
{ 0x3F6A, 0xD77A },
|
||||
{ 0x3F6B, 0xDBA7 },
|
||||
{ 0x4424, 0x0000 },
|
||||
{ 0x4176, 0xDDFC },
|
||||
{ 0x4177, 0x0000 },
|
||||
{ 0x4424, 0xDDFD },
|
||||
{ 0x554B, 0xEBF1 },
|
||||
{ 0x554C, 0xE8A3 },
|
||||
{ 0x5722, 0xECDE },
|
||||
{ 0x5723, 0xE976 },
|
||||
{ 0x5A28, 0xF0CB },
|
||||
{ 0x5A29, 0xEB5B },
|
||||
{ 0x5B3F, 0xEBF2 },
|
||||
{ 0x5C6A, 0xECDF },
|
||||
{ 0x5D74, 0xF056 },
|
||||
{ 0x5D75, 0xEDAA },
|
||||
{ 0x6039, 0xEEEC },
|
||||
{ 0x6243, 0xF057 },
|
||||
{ 0x6337, 0xF0CC },
|
||||
{ 0x642F, 0xEEEB },
|
||||
{ 0x6430, 0xF163 },
|
||||
{ 0x6438, 0xF16C },
|
||||
{ 0x6573, 0xF269 },
|
||||
{ 0x664D, 0xF4B5 },
|
||||
{ 0x664E, 0xF2C3 },
|
||||
{ 0x6761, 0xF16B },
|
||||
{ 0x6762, 0xF375 },
|
||||
{ 0x6934, 0xF268 },
|
||||
{ 0x6935, 0xF466 },
|
||||
{ 0x6962, 0xF4B6 },
|
||||
{ 0x6A4B, 0xF663 },
|
||||
{ 0x6A4C, 0xF4FD },
|
||||
{ 0x6C52, 0xF664 },
|
||||
{ 0x7166, 0xF9C4 },
|
||||
{ 0x7167, 0xF977 },
|
||||
{ 0x7234, 0xF9C5 },
|
||||
{ 0x7235, 0xF9C7 },
|
||||
{ 0x7240, 0xF9C6 },
|
||||
{ 0x7241, 0xF9D2 },
|
||||
{ 0x7245, 0x0000 }
|
||||
static codes_t cnsPlane2ToBig5Level2[49] = { /* range */
|
||||
{0x2121, 0xC940},
|
||||
{0x212B, 0xC94B},
|
||||
{0x214C, 0xC9BE},
|
||||
{0x214D, 0xC96C},
|
||||
{0x217D, 0xC9BF},
|
||||
{0x224D, 0xCAF7},
|
||||
{0x224E, 0xC9ED},
|
||||
{0x2439, 0xCAF8},
|
||||
{0x387E, 0xD77B},
|
||||
{0x3F6A, 0xD77A},
|
||||
{0x3F6B, 0xDBA7},
|
||||
{0x4424, 0x0000},
|
||||
{0x4176, 0xDDFC},
|
||||
{0x4177, 0x0000},
|
||||
{0x4424, 0xDDFD},
|
||||
{0x554B, 0xEBF1},
|
||||
{0x554C, 0xE8A3},
|
||||
{0x5722, 0xECDE},
|
||||
{0x5723, 0xE976},
|
||||
{0x5A28, 0xF0CB},
|
||||
{0x5A29, 0xEB5B},
|
||||
{0x5B3F, 0xEBF2},
|
||||
{0x5C6A, 0xECDF},
|
||||
{0x5D74, 0xF056},
|
||||
{0x5D75, 0xEDAA},
|
||||
{0x6039, 0xEEEC},
|
||||
{0x6243, 0xF057},
|
||||
{0x6337, 0xF0CC},
|
||||
{0x642F, 0xEEEB},
|
||||
{0x6430, 0xF163},
|
||||
{0x6438, 0xF16C},
|
||||
{0x6573, 0xF269},
|
||||
{0x664D, 0xF4B5},
|
||||
{0x664E, 0xF2C3},
|
||||
{0x6761, 0xF16B},
|
||||
{0x6762, 0xF375},
|
||||
{0x6934, 0xF268},
|
||||
{0x6935, 0xF466},
|
||||
{0x6962, 0xF4B6},
|
||||
{0x6A4B, 0xF663},
|
||||
{0x6A4C, 0xF4FD},
|
||||
{0x6C52, 0xF664},
|
||||
{0x7166, 0xF9C4},
|
||||
{0x7167, 0xF977},
|
||||
{0x7234, 0xF9C5},
|
||||
{0x7235, 0xF9C7},
|
||||
{0x7240, 0xF9C6},
|
||||
{0x7241, 0xF9D2},
|
||||
{0x7245, 0x0000}
|
||||
};
|
||||
|
||||
/* Big Five Level 1 Correspondence to CNS 11643-1992 Plane 4 */
|
||||
static unsigned short b1c4[][2] = {
|
||||
{0xC879, 0x2123},
|
||||
{0xC87B, 0x2124},
|
||||
{0xC87D, 0x212A},
|
||||
{0xC8A2, 0x2152}
|
||||
{0xC879, 0x2123},
|
||||
{0xC87B, 0x2124},
|
||||
{0xC87D, 0x212A},
|
||||
{0xC8A2, 0x2152}
|
||||
};
|
||||
|
||||
/* Big Five Level 2 Correspondence to CNS 11643-1992 Plane 3 */
|
||||
static unsigned short b2c3[][2] = {
|
||||
{0xF9D6, 0x4337},
|
||||
{0xF9D7, 0x4F50},
|
||||
{0xF9D8, 0x444E},
|
||||
{0xF9D9, 0x504A},
|
||||
{0xF9DA, 0x2C5D},
|
||||
{0xF9DB, 0x3D7E},
|
||||
{0xF9DC, 0x4B5C}
|
||||
{0xF9D6, 0x4337},
|
||||
{0xF9D7, 0x4F50},
|
||||
{0xF9D8, 0x444E},
|
||||
{0xF9D9, 0x504A},
|
||||
{0xF9DA, 0x2C5D},
|
||||
{0xF9DB, 0x3D7E},
|
||||
{0xF9DC, 0x4B5C}
|
||||
};
|
||||
|
||||
static unsigned short BinarySearchRange
|
||||
(codes_t *array, int high, unsigned short code )
|
||||
(codes_t * array, int high, unsigned short code)
|
||||
{
|
||||
int low, mid, distance, tmp;
|
||||
int low,
|
||||
mid,
|
||||
distance,
|
||||
tmp;
|
||||
|
||||
low = 0;
|
||||
mid = high >> 1;
|
||||
low = 0;
|
||||
mid = high >> 1;
|
||||
|
||||
for (; low <= high; mid = (low + high) >> 1)
|
||||
{
|
||||
if ((array[mid].code <= code) && (array[mid + 1].code > code))
|
||||
{
|
||||
if (0 == array[mid].peer)
|
||||
return 0;
|
||||
if (code >= 0xa140 U)
|
||||
{
|
||||
/* big5 to cns */
|
||||
tmp = ((code & 0xff00) - (array[mid].code & 0xff00)) >> 8;
|
||||
high = code & 0x00ff;
|
||||
low = array[mid].code & 0x00ff;
|
||||
|
||||
/*
|
||||
* NOTE: big5 high_byte: 0xa1-0xfe, low_byte: 0x40-0x7e,
|
||||
* 0xa1-0xfe (radicals: 0x00-0x3e, 0x3f-0x9c) big5 radix
|
||||
* is 0x9d. [region_low, region_high]
|
||||
* We should remember big5 has two different regions
|
||||
* (above). There is a bias for the distance between these
|
||||
* regions. 0xa1 - 0x7e + bias = 1 (Distance between 0xa1
|
||||
* and 0x7e is 1.) bias = - 0x22.
|
||||
*/
|
||||
distance = tmp * 0x9d + high - low +
|
||||
(high >= 0xa1 ? (low >= 0xa1 ? 0 : -0x22)
|
||||
: (low >= 0xa1 ? +0x22 : 0));
|
||||
|
||||
/*
|
||||
* NOTE: we have to convert the distance into a code
|
||||
* point. The code point's low_byte is 0x21 plus mod_0x5e.
|
||||
* In the first, we extract the mod_0x5e of the starting
|
||||
* code point, subtracting 0x21, and add distance to it.
|
||||
* Then we calculate again mod_0x5e of them, and restore
|
||||
* the final codepoint, adding 0x21.
|
||||
*/
|
||||
tmp = (array[mid].peer & 0x00ff) + distance - 0x21;
|
||||
tmp = (array[mid].peer & 0xff00) + ((tmp / 0x5e) << 8)
|
||||
+ 0x21 + tmp % 0x5e;
|
||||
return tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* cns to big5 */
|
||||
tmp = ((code & 0xff00) - (array[mid].code & 0xff00)) >> 8;
|
||||
|
||||
/*
|
||||
* NOTE: ISO charsets ranges between 0x21-0xfe
|
||||
* (94charset). Its radix is 0x5e. But there is no
|
||||
* distance bias like big5.
|
||||
*/
|
||||
distance = tmp * 0x5e
|
||||
+ ((int) (code & 0x00ff) - (int) (array[mid].code & 0x00ff));
|
||||
|
||||
/*
|
||||
* NOTE: Similar to big5 to cns conversion, we extract
|
||||
* mod_0x9d and restore mod_0x9d into a code point.
|
||||
*/
|
||||
low = array[mid].peer & 0x00ff;
|
||||
tmp = low + distance - (low >= 0xa1 ? 0x62 : 0x40);
|
||||
low = tmp % 0x9d;
|
||||
tmp = (array[mid].peer & 0xff00) + ((tmp / 0x9d) << 8)
|
||||
+ (low > 0x3e ? 0x62 : 0x40) + low;
|
||||
return tmp;
|
||||
}
|
||||
}
|
||||
else if (array[mid].code > code)
|
||||
high = mid - 1;
|
||||
else
|
||||
low = mid + 1;
|
||||
}
|
||||
|
||||
for( ; low <= high ; mid = ( low + high ) >> 1 ){
|
||||
if( ( array[ mid ].code <= code ) && ( array[ mid + 1 ].code > code ) ){
|
||||
if( 0 == array[ mid ].peer )
|
||||
return 0;
|
||||
if( code >= 0xa140U ){
|
||||
/* big5 to cns */
|
||||
tmp = ( ( code & 0xff00 ) - ( array[ mid ].code & 0xff00 ) ) >> 8;
|
||||
high = code & 0x00ff;
|
||||
low = array[ mid ].code & 0x00ff;
|
||||
/*
|
||||
* NOTE: big5 high_byte: 0xa1-0xfe, low_byte: 0x40-0x7e, 0xa1-0xfe
|
||||
* (radicals: 0x00-0x3e, 0x3f-0x9c)
|
||||
* big5 radix is 0x9d. [region_low, region_high]
|
||||
* We should remember big5 has two different regions (above).
|
||||
* There is a bias for the distance between these regions.
|
||||
* 0xa1 - 0x7e + bias = 1 (Distance between 0xa1 and 0x7e is 1.)
|
||||
* bias = - 0x22.
|
||||
*/
|
||||
distance = tmp * 0x9d + high - low +
|
||||
( high >= 0xa1 ? ( low >= 0xa1 ? 0 : - 0x22 )
|
||||
: ( low >= 0xa1 ? + 0x22 : 0 ) );
|
||||
/*
|
||||
* NOTE: we have to convert the distance into a code point.
|
||||
* The code point's low_byte is 0x21 plus mod_0x5e.
|
||||
* In the first, we extract the mod_0x5e of the starting
|
||||
* code point, subtracting 0x21, and add distance to it.
|
||||
* Then we calculate again mod_0x5e of them, and restore
|
||||
* the final codepoint, adding 0x21.
|
||||
*/
|
||||
tmp = ( array[ mid ].peer & 0x00ff ) + distance - 0x21;
|
||||
tmp = ( array[ mid ].peer & 0xff00 ) + ( ( tmp / 0x5e ) << 8 )
|
||||
+ 0x21 + tmp % 0x5e;
|
||||
return tmp;
|
||||
} else {
|
||||
/* cns to big5 */
|
||||
tmp = ( ( code & 0xff00 ) - ( array[ mid ].code & 0xff00 ) ) >> 8;
|
||||
/*
|
||||
* NOTE: ISO charsets ranges between 0x21-0xfe (94charset).
|
||||
* Its radix is 0x5e. But there is no distance bias like big5.
|
||||
*/
|
||||
distance = tmp * 0x5e
|
||||
+ ( (int)( code & 0x00ff ) - (int)( array[ mid ].code & 0x00ff ) );
|
||||
/*
|
||||
* NOTE: Similar to big5 to cns conversion, we extract mod_0x9d and
|
||||
* restore mod_0x9d into a code point.
|
||||
*/
|
||||
low = array[ mid ].peer & 0x00ff;
|
||||
tmp = low + distance - ( low >= 0xa1 ? 0x62 : 0x40 );
|
||||
low = tmp % 0x9d;
|
||||
tmp = ( array[ mid ].peer & 0xff00 ) + ( ( tmp / 0x9d ) << 8 )
|
||||
+ ( low > 0x3e ? 0x62 : 0x40 ) + low;
|
||||
return tmp;
|
||||
}
|
||||
} else if( array[ mid ].code > code ){
|
||||
high = mid - 1;
|
||||
} else {
|
||||
low = mid + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc )
|
||||
unsigned short
|
||||
BIG5toCNS(unsigned short big5, unsigned char *lc)
|
||||
{
|
||||
unsigned short cns = 0;
|
||||
int i;
|
||||
unsigned short cns = 0;
|
||||
int i;
|
||||
|
||||
if( big5 < 0xc940U ){
|
||||
/* level 1 */
|
||||
if (big5 < 0xc940 U)
|
||||
{
|
||||
/* level 1 */
|
||||
|
||||
for (i=0;i<sizeof(b1c4)/sizeof(unsigned short);i++) {
|
||||
if (b1c4[i][0] == big5) {
|
||||
*lc = LC_CNS11643_4;
|
||||
return(b1c4[i][1] | 0x8080U);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < sizeof(b1c4) / sizeof(unsigned short); i++)
|
||||
{
|
||||
if (b1c4[i][0] == big5)
|
||||
{
|
||||
*lc = LC_CNS11643_4;
|
||||
return (b1c4[i][1] | 0x8080 U);
|
||||
}
|
||||
}
|
||||
|
||||
if( 0 < (cns = BinarySearchRange( big5Level1ToCnsPlane1, 23, big5 )) )
|
||||
*lc = LC_CNS11643_1;
|
||||
} else if( big5 == 0xc94aU ){
|
||||
/* level 2 */
|
||||
*lc = LC_CNS11643_1;
|
||||
cns = 0x4442;
|
||||
} else {
|
||||
/* level 2 */
|
||||
for (i=0;i<sizeof(b2c3)/sizeof(unsigned short);i++) {
|
||||
if (b2c3[i][0] == big5) {
|
||||
*lc = LC_CNS11643_3;
|
||||
return(b2c3[i][1]);
|
||||
}
|
||||
}
|
||||
if (0 < (cns = BinarySearchRange(big5Level1ToCnsPlane1, 23, big5)))
|
||||
*lc = LC_CNS11643_1;
|
||||
}
|
||||
else if (big5 == 0xc94a U)
|
||||
{
|
||||
/* level 2 */
|
||||
*lc = LC_CNS11643_1;
|
||||
cns = 0x4442;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* level 2 */
|
||||
for (i = 0; i < sizeof(b2c3) / sizeof(unsigned short); i++)
|
||||
{
|
||||
if (b2c3[i][0] == big5)
|
||||
{
|
||||
*lc = LC_CNS11643_3;
|
||||
return (b2c3[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
if( 0 < (cns = BinarySearchRange( big5Level2ToCnsPlane2, 46, big5 )) )
|
||||
*lc = LC_CNS11643_2;
|
||||
}
|
||||
if (0 < (cns = BinarySearchRange(big5Level2ToCnsPlane2, 46, big5)))
|
||||
*lc = LC_CNS11643_2;
|
||||
}
|
||||
|
||||
if( 0 == cns ){ /* no mapping Big5 to CNS 11643-1992 */
|
||||
*lc = 0;
|
||||
return (unsigned short)'?';
|
||||
}
|
||||
if (0 == cns)
|
||||
{ /* no mapping Big5 to CNS 11643-1992 */
|
||||
*lc = 0;
|
||||
return (unsigned short) '?';
|
||||
}
|
||||
|
||||
return cns | 0x8080;
|
||||
return cns | 0x8080;
|
||||
}
|
||||
|
||||
unsigned short CNStoBIG5( unsigned short cns, unsigned char lc )
|
||||
unsigned short
|
||||
CNStoBIG5(unsigned short cns, unsigned char lc)
|
||||
{
|
||||
int i;
|
||||
unsigned int big5 = 0;
|
||||
int i;
|
||||
unsigned int big5 = 0;
|
||||
|
||||
cns &= 0x7f7f;
|
||||
cns &= 0x7f7f;
|
||||
|
||||
switch( lc ){
|
||||
case LC_CNS11643_1:
|
||||
big5 = BinarySearchRange( cnsPlane1ToBig5Level1, 24, cns );
|
||||
break;
|
||||
case LC_CNS11643_2:
|
||||
big5 = BinarySearchRange( cnsPlane2ToBig5Level2, 47, cns );
|
||||
break;
|
||||
case LC_CNS11643_3:
|
||||
for (i=0;i<sizeof(b2c3)/sizeof(unsigned short);i++) {
|
||||
if (b2c3[i][1] == cns) {
|
||||
return(b2c3[i][0]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LC_CNS11643_4:
|
||||
for (i=0;i<sizeof(b1c4)/sizeof(unsigned short);i++) {
|
||||
if (b1c4[i][1] == cns) {
|
||||
return(b1c4[i][0]);
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return big5;
|
||||
switch (lc)
|
||||
{
|
||||
case LC_CNS11643_1:
|
||||
big5 = BinarySearchRange(cnsPlane1ToBig5Level1, 24, cns);
|
||||
break;
|
||||
case LC_CNS11643_2:
|
||||
big5 = BinarySearchRange(cnsPlane2ToBig5Level2, 47, cns);
|
||||
break;
|
||||
case LC_CNS11643_3:
|
||||
for (i = 0; i < sizeof(b2c3) / sizeof(unsigned short); i++)
|
||||
{
|
||||
if (b2c3[i][1] == cns)
|
||||
return (b2c3[i][0]);
|
||||
}
|
||||
break;
|
||||
case LC_CNS11643_4:
|
||||
for (i = 0; i < sizeof(b1c4) / sizeof(unsigned short); i++)
|
||||
{
|
||||
if (b1c4[i][1] == cns)
|
||||
return (b1c4[i][0]);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return big5;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This file contains some public functions
|
||||
* usable for both the backend and the frontend.
|
||||
* Tatsuo Ishii
|
||||
* $Id: common.c,v 1.4 1999/05/13 10:28:25 ishii Exp $ */
|
||||
* $Id: common.c,v 1.5 1999/05/25 16:12:41 momjian Exp $ */
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -28,9 +28,8 @@ pg_char_to_encoding(const char *s)
|
||||
{
|
||||
pg_encoding_conv_tbl *p = pg_conv_tbl;
|
||||
|
||||
if (!s) {
|
||||
if (!s)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
for (; p->encoding >= 0; p++)
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* conversion between client encoding and server internal encoding
|
||||
* (currently mule internal code (mic) is used)
|
||||
* Tatsuo Ishii
|
||||
* $Id: conv.c,v 1.7 1999/04/25 18:09:54 tgl Exp $
|
||||
* $Id: conv.c,v 1.8 1999/05/25 16:12:41 momjian Exp $
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -375,43 +375,52 @@ mic2euc_tw(unsigned char *mic, unsigned char *p, int len)
|
||||
static void
|
||||
big52mic(unsigned char *big5, unsigned char *p, int len)
|
||||
{
|
||||
unsigned short c1;
|
||||
unsigned short big5buf, cnsBuf;
|
||||
unsigned char lc;
|
||||
char bogusBuf[2];
|
||||
int i;
|
||||
unsigned short c1;
|
||||
unsigned short big5buf,
|
||||
cnsBuf;
|
||||
unsigned char lc;
|
||||
char bogusBuf[2];
|
||||
int i;
|
||||
|
||||
while (len > 0 && (c1 = *big5++))
|
||||
{
|
||||
if (c1 <= 0x007fU) { /* ASCII */
|
||||
len--;
|
||||
*p++ = c1;
|
||||
} else {
|
||||
len -= 2;
|
||||
big5buf = c1 << 8;
|
||||
c1 = *big5++;
|
||||
big5buf |= c1;
|
||||
cnsBuf = BIG5toCNS(big5buf, &lc);
|
||||
if (lc != 0) {
|
||||
if (lc == LC_CNS11643_3 || lc == LC_CNS11643_4) {
|
||||
*p++ = 0x9d; /* LCPRV2 */
|
||||
}
|
||||
*p++ = lc; /* Plane No. */
|
||||
*p++ = (cnsBuf >> 8) & 0x00ff;
|
||||
*p++ = cnsBuf & 0x00ff;
|
||||
} else { /* cannot convert */
|
||||
big5 -= 2;
|
||||
*p++ = '(';
|
||||
for (i=0;i<2;i++) {
|
||||
sprintf(bogusBuf,"%02x",*big5++);
|
||||
*p++ = bogusBuf[0];
|
||||
*p++ = bogusBuf[1];
|
||||
}
|
||||
*p++ = ')';
|
||||
while (len > 0 && (c1 = *big5++))
|
||||
{
|
||||
if (c1 <= 0x007f U)
|
||||
{ /* ASCII */
|
||||
len--;
|
||||
*p++ = c1;
|
||||
}
|
||||
else
|
||||
{
|
||||
len -= 2;
|
||||
big5buf = c1 << 8;
|
||||
c1 = *big5++;
|
||||
big5buf |= c1;
|
||||
cnsBuf = BIG5toCNS(big5buf, &lc);
|
||||
if (lc != 0)
|
||||
{
|
||||
if (lc == LC_CNS11643_3 || lc == LC_CNS11643_4)
|
||||
{
|
||||
*p++ = 0x9d;/* LCPRV2 */
|
||||
}
|
||||
*p++ = lc; /* Plane No. */
|
||||
*p++ = (cnsBuf >> 8) & 0x00ff;
|
||||
*p++ = cnsBuf & 0x00ff;
|
||||
}
|
||||
else
|
||||
{ /* cannot convert */
|
||||
big5 -= 2;
|
||||
*p++ = '(';
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
sprintf(bogusBuf, "%02x", *big5++);
|
||||
*p++ = bogusBuf[0];
|
||||
*p++ = bogusBuf[1];
|
||||
}
|
||||
*p++ = ')';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -420,41 +429,46 @@ big52mic(unsigned char *big5, unsigned char *p, int len)
|
||||
static void
|
||||
mic2big5(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
int l;
|
||||
unsigned short c1;
|
||||
unsigned short big5buf, cnsBuf;
|
||||
int l;
|
||||
unsigned short c1;
|
||||
unsigned short big5buf,
|
||||
cnsBuf;
|
||||
|
||||
while (len > 0 && (c1 = *mic))
|
||||
{
|
||||
l = pg_mic_mblen(mic++);
|
||||
len -= l;
|
||||
while (len > 0 && (c1 = *mic))
|
||||
{
|
||||
l = pg_mic_mblen(mic++);
|
||||
len -= l;
|
||||
|
||||
/* 0x9d means LCPRV2 */
|
||||
if (c1 == LC_CNS11643_1 || c1 == LC_CNS11643_2 || c1 == 0x9d)
|
||||
{
|
||||
if (c1 == 0x9d) {
|
||||
c1 = *mic++; /* get plane no. */
|
||||
}
|
||||
cnsBuf = (*mic++)<<8;
|
||||
cnsBuf |= (*mic++) & 0x00ff;
|
||||
big5buf = CNStoBIG5(cnsBuf, c1);
|
||||
if (big5buf == 0) { /* cannot convert to Big5! */
|
||||
mic -= l;
|
||||
printBogusChar(&mic, &p);
|
||||
} else {
|
||||
*p++ = (big5buf >> 8) & 0x00ff;
|
||||
*p++ = big5buf & 0x00ff;
|
||||
}
|
||||
/* 0x9d means LCPRV2 */
|
||||
if (c1 == LC_CNS11643_1 || c1 == LC_CNS11643_2 || c1 == 0x9d)
|
||||
{
|
||||
if (c1 == 0x9d)
|
||||
{
|
||||
c1 = *mic++; /* get plane no. */
|
||||
}
|
||||
cnsBuf = (*mic++) << 8;
|
||||
cnsBuf |= (*mic++) & 0x00ff;
|
||||
big5buf = CNStoBIG5(cnsBuf, c1);
|
||||
if (big5buf == 0)
|
||||
{ /* cannot convert to Big5! */
|
||||
mic -= l;
|
||||
printBogusChar(&mic, &p);
|
||||
}
|
||||
else
|
||||
{
|
||||
*p++ = (big5buf >> 8) & 0x00ff;
|
||||
*p++ = big5buf & 0x00ff;
|
||||
}
|
||||
}
|
||||
else if (c1 <= 0x7f) /* ASCII */
|
||||
*p++ = c1;
|
||||
else
|
||||
{ /* cannot convert to Big5! */
|
||||
mic--;
|
||||
printBogusChar(&mic, &p);
|
||||
}
|
||||
}
|
||||
else if (c1 <= 0x7f) /* ASCII */
|
||||
{
|
||||
*p++ = c1;
|
||||
} else { /* cannot convert to Big5! */
|
||||
mic--;
|
||||
printBogusChar(&mic, &p);
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -543,6 +557,7 @@ mic2latin4(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
mic2latin(mic, p, len, LC_ISO8859_4);
|
||||
}
|
||||
|
||||
#ifdef NOT_USED
|
||||
static void
|
||||
latin52mic(unsigned char *l, unsigned char *p, int len)
|
||||
@@ -554,6 +569,7 @@ mic2latin5(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
mic2latin(mic, p, len, LC_ISO8859_5);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -590,7 +606,7 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len)
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Cyrillic support
|
||||
* currently supported Cyrillic encodings:
|
||||
*
|
||||
@@ -601,18 +617,18 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len)
|
||||
* Alternativny Variant (MS-DOS CP866)
|
||||
*/
|
||||
|
||||
/* koi2mic: KOI8-R to Mule internal code */
|
||||
/* koi2mic: KOI8-R to Mule internal code */
|
||||
static void
|
||||
koi2mic(unsigned char *l, unsigned char *p, int len)
|
||||
{
|
||||
latin2mic(l, p, len, LC_KOI8_R);
|
||||
latin2mic(l, p, len, LC_KOI8_R);
|
||||
}
|
||||
|
||||
/* mic2koi: Mule internal code to KOI8-R */
|
||||
static void
|
||||
mic2koi(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
mic2latin(mic, p, len, LC_KOI8_R);
|
||||
mic2latin(mic, p, len, LC_KOI8_R);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -625,30 +641,36 @@ mic2koi(unsigned char *mic, unsigned char *p, int len)
|
||||
*/
|
||||
static void
|
||||
latin2mic_with_table(
|
||||
unsigned char *l, /* local charset string (source) */
|
||||
unsigned char *p, /* pointer to store mule internal code
|
||||
(destination) */
|
||||
int len, /* length of l */
|
||||
int lc, /* leading character of p */
|
||||
unsigned char *tab /* code conversion table */
|
||||
)
|
||||
unsigned char *l, /* local charset string (source) */
|
||||
unsigned char *p, /* pointer to store mule internal
|
||||
* code (destination) */
|
||||
int len, /* length of l */
|
||||
int lc, /* leading character of p */
|
||||
unsigned char *tab /* code conversion table */
|
||||
)
|
||||
{
|
||||
unsigned char c1,c2;
|
||||
|
||||
while (len-- > 0 && (c1 = *l++)) {
|
||||
if (c1 < 128) {
|
||||
*p++ = c1;
|
||||
} else {
|
||||
c2 = tab[c1 - 128];
|
||||
if (c2) {
|
||||
*p++ = lc;
|
||||
*p++ = c2;
|
||||
} else {
|
||||
*p++ = ' '; /* cannot convert */
|
||||
}
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
unsigned char c1,
|
||||
c2;
|
||||
|
||||
while (len-- > 0 && (c1 = *l++))
|
||||
{
|
||||
if (c1 < 128)
|
||||
*p++ = c1;
|
||||
else
|
||||
{
|
||||
c2 = tab[c1 - 128];
|
||||
if (c2)
|
||||
{
|
||||
*p++ = lc;
|
||||
*p++ = c2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*p++ = ' '; /* cannot convert */
|
||||
}
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -656,190 +678,202 @@ latin2mic_with_table(
|
||||
* conversion from the mule internal code to a local charset
|
||||
* with a encoding conversion table.
|
||||
* the table is ordered according to the second byte of the mule
|
||||
* internal code starting from 128 (0x80).
|
||||
* internal code starting from 128 (0x80).
|
||||
* each entry in the table
|
||||
* holds the corresponding code point for the local code.
|
||||
*/
|
||||
static void
|
||||
mic2latin_with_table(
|
||||
unsigned char *mic, /* mule internal code (source) */
|
||||
unsigned char *p, /* local code (destination) */
|
||||
int len, /* length of p */
|
||||
int lc, /* leading character */
|
||||
unsigned char *tab /* code conversion table */
|
||||
)
|
||||
unsigned char *mic, /* mule internal code
|
||||
* (source) */
|
||||
unsigned char *p, /* local code (destination) */
|
||||
int len, /* length of p */
|
||||
int lc, /* leading character */
|
||||
unsigned char *tab /* code conversion table */
|
||||
)
|
||||
{
|
||||
|
||||
unsigned char c1,c2;
|
||||
unsigned char c1,
|
||||
c2;
|
||||
|
||||
while (len-- > 0 && (c1 = *mic++)) {
|
||||
if (c1 < 128) {
|
||||
*p++ = c1;
|
||||
} else if (c1 == lc) {
|
||||
c1 = *mic++;
|
||||
len--;
|
||||
c2 = tab[c1 - 128];
|
||||
if (c2) {
|
||||
*p++ = c2;
|
||||
} else {
|
||||
*p++ = ' '; /* cannot convert */
|
||||
}
|
||||
} else {
|
||||
*p++ = ' '; /* bogus character */
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
while (len-- > 0 && (c1 = *mic++))
|
||||
{
|
||||
if (c1 < 128)
|
||||
*p++ = c1;
|
||||
else if (c1 == lc)
|
||||
{
|
||||
c1 = *mic++;
|
||||
len--;
|
||||
c2 = tab[c1 - 128];
|
||||
if (c2)
|
||||
*p++ = c2;
|
||||
else
|
||||
{
|
||||
*p++ = ' '; /* cannot convert */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*p++ = ' '; /* bogus character */
|
||||
}
|
||||
}
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
/* iso2mic: ISO-8859-5 to Mule internal code */
|
||||
/* iso2mic: ISO-8859-5 to Mule internal code */
|
||||
static void
|
||||
iso2mic(unsigned char *l, unsigned char *p, int len)
|
||||
{
|
||||
static char iso2koi[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi);
|
||||
static char iso2koi[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi);
|
||||
}
|
||||
|
||||
/* mic2iso: Mule internal code to ISO8859-5 */
|
||||
static void
|
||||
mic2iso(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
static char koi2iso[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3,
|
||||
0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,
|
||||
0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2,
|
||||
0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
|
||||
0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3,
|
||||
0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe,
|
||||
0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2,
|
||||
0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca
|
||||
};
|
||||
static char koi2iso[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3,
|
||||
0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde,
|
||||
0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2,
|
||||
0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
|
||||
0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3,
|
||||
0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe,
|
||||
0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2,
|
||||
0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca
|
||||
};
|
||||
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso);
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso);
|
||||
}
|
||||
|
||||
/* win2mic: CP1251 to Mule internal code */
|
||||
/* win2mic: CP1251 to Mule internal code */
|
||||
static void
|
||||
win2mic(unsigned char *l, unsigned char *p, int len)
|
||||
{
|
||||
static char win2koi[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7,
|
||||
0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00,
|
||||
0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7,
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1
|
||||
};
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi);
|
||||
static char win2koi[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7,
|
||||
0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00,
|
||||
0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7,
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1
|
||||
};
|
||||
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi);
|
||||
}
|
||||
|
||||
/* mic2win: Mule internal code to CP1251 */
|
||||
static void
|
||||
mic2win(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
static char koi2win[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00,
|
||||
0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3,
|
||||
0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee,
|
||||
0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2,
|
||||
0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa,
|
||||
0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3,
|
||||
0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce,
|
||||
0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2,
|
||||
0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda
|
||||
};
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win);
|
||||
static char koi2win[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00,
|
||||
0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3,
|
||||
0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee,
|
||||
0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2,
|
||||
0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa,
|
||||
0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3,
|
||||
0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce,
|
||||
0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2,
|
||||
0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda
|
||||
};
|
||||
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win);
|
||||
}
|
||||
|
||||
/* alt2mic: CP866 to Mule internal code */
|
||||
/* alt2mic: CP866 to Mule internal code */
|
||||
static void
|
||||
alt2mic(unsigned char *l, unsigned char *p, int len)
|
||||
{
|
||||
static char alt2koi[] = {
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
|
||||
0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00,
|
||||
0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi);
|
||||
static char alt2koi[] = {
|
||||
0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa,
|
||||
0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
||||
0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe,
|
||||
0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
|
||||
0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda,
|
||||
0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde,
|
||||
0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
|
||||
0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00,
|
||||
0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi);
|
||||
}
|
||||
|
||||
/* mic2alt: Mule internal code to CP866 */
|
||||
static void
|
||||
mic2alt(unsigned char *mic, unsigned char *p, int len)
|
||||
{
|
||||
static char koi2alt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3,
|
||||
0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae,
|
||||
0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2,
|
||||
0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
|
||||
0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83,
|
||||
0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
|
||||
0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,
|
||||
0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a
|
||||
};
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt);
|
||||
static char koi2alt[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
|
||||
0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3,
|
||||
0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae,
|
||||
0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2,
|
||||
0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea,
|
||||
0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83,
|
||||
0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
|
||||
0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82,
|
||||
0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a
|
||||
};
|
||||
|
||||
mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -858,8 +892,8 @@ pg_encoding_conv_tbl pg_conv_tbl[] = {
|
||||
{LATIN2, "LATIN2", 0, latin22mic, mic2latin2}, /* ISO 8859 Latin 2 */
|
||||
{LATIN3, "LATIN3", 0, latin32mic, mic2latin3}, /* ISO 8859 Latin 3 */
|
||||
{LATIN4, "LATIN4", 0, latin42mic, mic2latin4}, /* ISO 8859 Latin 4 */
|
||||
{LATIN5, "LATIN5", 0, iso2mic, mic2iso}, /* ISO 8859 Latin 5 */
|
||||
{KOI8, "KOI8", 0, koi2mic, mic2koi}, /* KOI8-R */
|
||||
{LATIN5, "LATIN5", 0, iso2mic, mic2iso}, /* ISO 8859 Latin 5 */
|
||||
{KOI8, "KOI8", 0, koi2mic, mic2koi}, /* KOI8-R */
|
||||
{WIN, "WIN", 0, win2mic, mic2win}, /* CP1251 */
|
||||
{ALT, "ALT", 0, alt2mic, mic2alt}, /* CP866 */
|
||||
{SJIS, "SJIS", 1, sjis2mic, mic2sjis}, /* SJIS */
|
||||
|
||||
@@ -4,63 +4,69 @@
|
||||
*
|
||||
* Tatsuo Ishii
|
||||
*
|
||||
* $Id: iso.c,v 1.1 1999/03/24 07:01:37 ishii Exp $
|
||||
* $Id: iso.c,v 1.2 1999/05/25 16:12:42 momjian Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
char koitab[128],isotab[128];
|
||||
char buf[4096];
|
||||
int koi,iso;
|
||||
int i;
|
||||
char koitab[128],
|
||||
isotab[128];
|
||||
char buf[4096];
|
||||
int koi,
|
||||
iso;
|
||||
|
||||
for (i=0;i<128;i++) {
|
||||
koitab[i] = isotab[i] = 0;
|
||||
}
|
||||
for (i = 0; i < 128; i++)
|
||||
koitab[i] = isotab[i] = 0;
|
||||
|
||||
while (fgets(buf,sizeof(buf),stdin) != NULL) {
|
||||
if (*buf == '#') {
|
||||
continue;
|
||||
}
|
||||
sscanf(buf,"%d %x",&koi,&iso);
|
||||
if (koi < 128 || koi > 255 || iso < 128 || iso > 255) {
|
||||
fprintf(stderr,"invalid value %d\n",koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi-128] = iso;
|
||||
isotab[iso-128] = koi;
|
||||
}
|
||||
while (fgets(buf, sizeof(buf), stdin) != NULL)
|
||||
{
|
||||
if (*buf == '#')
|
||||
continue;
|
||||
sscanf(buf, "%d %x", &koi, &iso);
|
||||
if (koi < 128 || koi > 255 || iso < 128 || iso > 255)
|
||||
{
|
||||
fprintf(stderr, "invalid value %d\n", koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi - 128] = iso;
|
||||
isotab[iso - 128] = koi;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
printf("static char koi2iso[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
i = 0;
|
||||
printf("static char koi2iso[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
i = 0;
|
||||
printf("static char iso2koi[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",isotab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
|
||||
i = 0;
|
||||
printf("static char iso2koi[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", isotab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
}
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
* client encoding and server internal encoding.
|
||||
* (currently mule internal code (mic) is used)
|
||||
* Tatsuo Ishii
|
||||
* $Id: mbutils.c,v 1.5 1999/02/02 18:51:23 momjian Exp $ */
|
||||
* $Id: mbutils.c,v 1.6 1999/05/25 16:12:43 momjian Exp $ */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "mb/pg_wchar.h"
|
||||
|
||||
static int client_encoding = -1;
|
||||
static int client_encoding = -1;
|
||||
static void (*client_to_mic) ();/* something to MIC */
|
||||
static void (*client_from_mic) (); /* MIC to something */
|
||||
static void (*server_to_mic) ();/* something to MIC */
|
||||
@@ -213,16 +213,14 @@ pg_mbcliplen(const unsigned char *mbstr, int len, int limit)
|
||||
int clen = 0;
|
||||
int l;
|
||||
|
||||
while (*mbstr && len > 0)
|
||||
while (*mbstr && len > 0)
|
||||
{
|
||||
l = pg_mblen(mbstr);
|
||||
if ((clen + l) > limit) {
|
||||
if ((clen + l) > limit)
|
||||
break;
|
||||
}
|
||||
clen += l;
|
||||
if (clen == limit) {
|
||||
if (clen == limit)
|
||||
break;
|
||||
}
|
||||
len -= l;
|
||||
mbstr += l;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This file contains some public functions
|
||||
* related to show/set/reset variable commands.
|
||||
* Tatsuo Ishii
|
||||
* $Id: variable.c,v 1.3 1999/05/13 10:28:26 ishii Exp $
|
||||
* $Id: variable.c,v 1.4 1999/05/25 16:12:44 momjian Exp $
|
||||
*/
|
||||
|
||||
#include "mb/pg_wchar.h"
|
||||
@@ -13,12 +13,12 @@ parse_client_encoding(const char *value)
|
||||
int encoding;
|
||||
|
||||
encoding = pg_valid_client_encoding(value);
|
||||
if (encoding < 0) {
|
||||
if (value) {
|
||||
if (encoding < 0)
|
||||
{
|
||||
if (value)
|
||||
elog(ERROR, "Client encoding %s is not supported", value);
|
||||
} else {
|
||||
else
|
||||
elog(ERROR, "No client encoding is specified");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* conversion functions between pg_wchar and multi-byte streams.
|
||||
* Tatsuo Ishii
|
||||
* $Id: wchar.c,v 1.7 1999/04/25 20:35:51 tgl Exp $
|
||||
* $Id: wchar.c,v 1.8 1999/05/25 16:12:45 momjian Exp $
|
||||
*/
|
||||
|
||||
#include "mb/pg_wchar.h"
|
||||
@@ -428,33 +428,33 @@ pg_wchar_tbl pg_wchar_table[] = {
|
||||
{pg_euctw2wchar_with_len, pg_euctw_mblen}, /* 4 */
|
||||
{pg_utf2wchar_with_len, pg_utf_mblen}, /* 5 */
|
||||
{pg_mule2wchar_with_len, pg_mule_mblen}, /* 6 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 7 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 8 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 9 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 10 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 11 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 12 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 13 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 14 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 15 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 16 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 17 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 18 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 19 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 20 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 21 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 22 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 23 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 24 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 25 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 26 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 27 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 28 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 29 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 30 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 31 */
|
||||
{0, pg_sjis_mblen}, /* 32 */
|
||||
{0, pg_big5_mblen} /* 33 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 7 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 8 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 9 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 10 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 11 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 12 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 13 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 14 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 15 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 16 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 17 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 18 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 19 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 20 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 21 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 22 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 23 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 24 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 25 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 26 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 27 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 28 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 29 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 30 */
|
||||
{pg_latin12wchar_with_len, pg_latin1_mblen}, /* 31 */
|
||||
{0, pg_sjis_mblen}, /* 32 */
|
||||
{0, pg_big5_mblen} /* 33 */
|
||||
};
|
||||
|
||||
/* returns the byte length of a word for mule internal code */
|
||||
|
||||
@@ -4,63 +4,69 @@
|
||||
*
|
||||
* Tatsuo Ishii
|
||||
*
|
||||
* $Id: win.c,v 1.1 1999/03/24 07:01:37 ishii Exp $
|
||||
* $Id: win.c,v 1.2 1999/05/25 16:12:45 momjian Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
main()
|
||||
{
|
||||
int i;
|
||||
char koitab[128],wintab[128];
|
||||
char buf[4096];
|
||||
int koi,win;
|
||||
int i;
|
||||
char koitab[128],
|
||||
wintab[128];
|
||||
char buf[4096];
|
||||
int koi,
|
||||
win;
|
||||
|
||||
for (i=0;i<128;i++) {
|
||||
koitab[i] = wintab[i] = 0;
|
||||
}
|
||||
for (i = 0; i < 128; i++)
|
||||
koitab[i] = wintab[i] = 0;
|
||||
|
||||
while (fgets(buf,sizeof(buf),stdin) != NULL) {
|
||||
if (*buf == '#') {
|
||||
continue;
|
||||
}
|
||||
sscanf(buf,"%d %d",&koi,&win);
|
||||
if (koi < 128 || koi > 255 || win < 128 || win > 255) {
|
||||
fprintf(stderr,"invalid value %d\n",koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi-128] = win;
|
||||
wintab[win-128] = koi;
|
||||
}
|
||||
while (fgets(buf, sizeof(buf), stdin) != NULL)
|
||||
{
|
||||
if (*buf == '#')
|
||||
continue;
|
||||
sscanf(buf, "%d %d", &koi, &win);
|
||||
if (koi < 128 || koi > 255 || win < 128 || win > 255)
|
||||
{
|
||||
fprintf(stderr, "invalid value %d\n", koi);
|
||||
exit(1);
|
||||
}
|
||||
koitab[koi - 128] = win;
|
||||
wintab[win - 128] = koi;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
printf("static char koi2win[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
i = 0;
|
||||
printf("static char koi2win[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
i = 0;
|
||||
printf("static char win2koi[] = {\n");
|
||||
while (i < 128) {
|
||||
int j = 0;
|
||||
while (j < 8) {
|
||||
printf("0x%02x",wintab[i++]);
|
||||
j++;
|
||||
if (i >= 128) {
|
||||
break;
|
||||
}
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", koitab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
|
||||
i = 0;
|
||||
printf("static char win2koi[] = {\n");
|
||||
while (i < 128)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
while (j < 8)
|
||||
{
|
||||
printf("0x%02x", wintab[i++]);
|
||||
j++;
|
||||
if (i >= 128)
|
||||
break;
|
||||
printf(", ");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("};\n");
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.23 1999/02/13 23:20:03 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.24 1999/05/25 16:12:47 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -188,7 +188,7 @@ GetRawDatabaseInfo(char *name, int4 *owner, Oid *db_id, char *path, int *encodin
|
||||
int nbytes;
|
||||
int max,
|
||||
i;
|
||||
HeapTupleData tup;
|
||||
HeapTupleData tup;
|
||||
Page pg;
|
||||
PageHeader ph;
|
||||
char *dbfname;
|
||||
|
||||
@@ -132,10 +132,10 @@ tprintf(int flag, const char *fmt,...)
|
||||
* Print a timestamp and a message to stdout or to syslog.
|
||||
*/
|
||||
int
|
||||
tprintf1(const char *fmt, ... )
|
||||
tprintf1(const char *fmt,...)
|
||||
{
|
||||
va_list ap;
|
||||
char line[ELOG_MAXLEN+TIMESTAMP_SIZE+1];
|
||||
char line[ELOG_MAXLEN + TIMESTAMP_SIZE + 1];
|
||||
|
||||
va_start(ap, fmt);
|
||||
#ifdef ELOG_TIMESTAMPS
|
||||
@@ -145,10 +145,11 @@ tprintf1(const char *fmt, ... )
|
||||
va_end(ap);
|
||||
|
||||
#ifdef USE_SYSLOG
|
||||
write_syslog(LOG_INFO, line+TIMESTAMP_SIZE);
|
||||
write_syslog(LOG_INFO, line + TIMESTAMP_SIZE);
|
||||
#endif
|
||||
|
||||
if (UseSyslog <= 1) {
|
||||
if (UseSyslog <= 1)
|
||||
{
|
||||
puts(line);
|
||||
fflush(stdout);
|
||||
}
|
||||
@@ -193,7 +194,7 @@ eprintf(const char *fmt,...)
|
||||
void
|
||||
write_syslog(int level, char *line)
|
||||
{
|
||||
static int openlog_done = 0;
|
||||
static int openlog_done = 0;
|
||||
|
||||
if (UseSyslog >= 1)
|
||||
{
|
||||
@@ -348,9 +349,10 @@ read_pg_options(SIGNAL_ARGS)
|
||||
char *s,
|
||||
*p;
|
||||
|
||||
if (!DataDir) {
|
||||
fprintf(stderr, "read_pg_options: DataDir not defined\n");
|
||||
return;
|
||||
if (!DataDir)
|
||||
{
|
||||
fprintf(stderr, "read_pg_options: DataDir not defined\n");
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(buffer, BUF_SIZE - 1, "%s/%s", DataDir, "pg_options");
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.15 1999/05/22 23:19:37 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.16 1999/05/25 16:12:51 momjian Exp $
|
||||
*
|
||||
* NOTE:
|
||||
* This is a new (Feb. 05, 1999) implementation of the allocation set
|
||||
@@ -51,7 +51,7 @@
|
||||
*/
|
||||
|
||||
#define ALLOC_MINBITS 4 /* smallest chunk size is 16 bytes */
|
||||
#define ALLOC_SMALLCHUNK_LIMIT (1 << (ALLOCSET_NUM_FREELISTS-2+ALLOC_MINBITS))
|
||||
#define ALLOC_SMALLCHUNK_LIMIT (1 << (ALLOCSET_NUM_FREELISTS-2+ALLOC_MINBITS))
|
||||
/* Size of largest chunk that we use a fixed size for */
|
||||
|
||||
/*--------------------
|
||||
@@ -65,8 +65,8 @@
|
||||
*--------------------
|
||||
*/
|
||||
|
||||
#define ALLOC_MIN_BLOCK_SIZE 8192
|
||||
#define ALLOC_MAX_BLOCK_SIZE (8 * 1024 * 1024)
|
||||
#define ALLOC_MIN_BLOCK_SIZE 8192
|
||||
#define ALLOC_MAX_BLOCK_SIZE (8 * 1024 * 1024)
|
||||
|
||||
|
||||
#define ALLOC_BLOCKHDRSZ MAXALIGN(sizeof(AllocBlockData))
|
||||
@@ -91,12 +91,12 @@
|
||||
static inline int
|
||||
AllocSetFreeIndex(Size size)
|
||||
{
|
||||
int idx = 0;
|
||||
int idx = 0;
|
||||
|
||||
if (size > 0)
|
||||
{
|
||||
size = (size - 1) >> ALLOC_MINBITS;
|
||||
while (size != 0 && idx < ALLOCSET_NUM_FREELISTS-1)
|
||||
while (size != 0 && idx < ALLOCSET_NUM_FREELISTS - 1)
|
||||
{
|
||||
idx++;
|
||||
size >>= 1;
|
||||
@@ -105,7 +105,7 @@ AllocSetFreeIndex(Size size)
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Public routines
|
||||
@@ -119,7 +119,7 @@ AllocSetFreeIndex(Size size)
|
||||
*/
|
||||
|
||||
/*
|
||||
* AllocSetInit
|
||||
* AllocSetInit
|
||||
* Initializes given allocation set.
|
||||
*
|
||||
* Note:
|
||||
@@ -147,7 +147,7 @@ AllocSetInit(AllocSet set, AllocMode mode, Size limit)
|
||||
|
||||
|
||||
/*
|
||||
* AllocSetReset
|
||||
* AllocSetReset
|
||||
* Frees memory which is allocated in the given set.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -156,8 +156,8 @@ AllocSetInit(AllocSet set, AllocMode mode, Size limit)
|
||||
void
|
||||
AllocSetReset(AllocSet set)
|
||||
{
|
||||
AllocBlock block = set->blocks;
|
||||
AllocBlock next;
|
||||
AllocBlock block = set->blocks;
|
||||
AllocBlock next;
|
||||
|
||||
AssertArg(AllocSetIsValid(set));
|
||||
|
||||
@@ -172,7 +172,7 @@ AllocSetReset(AllocSet set)
|
||||
}
|
||||
|
||||
/*
|
||||
* AllocSetContains
|
||||
* AllocSetContains
|
||||
* True iff allocation set contains given allocation element.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -189,7 +189,7 @@ AllocSetContains(AllocSet set, AllocPointer pointer)
|
||||
}
|
||||
|
||||
/*
|
||||
* AllocSetAlloc
|
||||
* AllocSetAlloc
|
||||
* Returns pointer to allocated memory of given size; memory is added
|
||||
* to the set.
|
||||
*
|
||||
@@ -200,22 +200,22 @@ AllocSetContains(AllocSet set, AllocPointer pointer)
|
||||
AllocPointer
|
||||
AllocSetAlloc(AllocSet set, Size size)
|
||||
{
|
||||
AllocBlock block;
|
||||
AllocChunk chunk;
|
||||
AllocChunk freeref = NULL;
|
||||
int fidx;
|
||||
Size chunk_size;
|
||||
Size blksize;
|
||||
AllocBlock block;
|
||||
AllocChunk chunk;
|
||||
AllocChunk freeref = NULL;
|
||||
int fidx;
|
||||
Size chunk_size;
|
||||
Size blksize;
|
||||
|
||||
AssertArg(AllocSetIsValid(set));
|
||||
|
||||
/*
|
||||
* Lookup in the corresponding free list if there is a
|
||||
* free chunk we could reuse
|
||||
* Lookup in the corresponding free list if there is a free chunk we
|
||||
* could reuse
|
||||
*
|
||||
*/
|
||||
fidx = AllocSetFreeIndex(size);
|
||||
for (chunk = set->freelist[fidx]; chunk; chunk = (AllocChunk)chunk->aset)
|
||||
for (chunk = set->freelist[fidx]; chunk; chunk = (AllocChunk) chunk->aset)
|
||||
{
|
||||
if (chunk->size >= size)
|
||||
break;
|
||||
@@ -223,18 +223,18 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* If one is found, remove it from the free list, make it again
|
||||
* a member of the alloc set and return it's data address.
|
||||
* If one is found, remove it from the free list, make it again a
|
||||
* member of the alloc set and return it's data address.
|
||||
*
|
||||
*/
|
||||
if (chunk != NULL)
|
||||
{
|
||||
if (freeref == NULL)
|
||||
set->freelist[fidx] = (AllocChunk)chunk->aset;
|
||||
set->freelist[fidx] = (AllocChunk) chunk->aset;
|
||||
else
|
||||
freeref->aset = chunk->aset;
|
||||
|
||||
chunk->aset = (void *)set;
|
||||
chunk->aset = (void *) set;
|
||||
return AllocChunkGetPointer(chunk);
|
||||
}
|
||||
|
||||
@@ -248,8 +248,8 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
Assert(chunk_size >= size);
|
||||
|
||||
/*
|
||||
* If there is enough room in the active allocation block,
|
||||
* always allocate the chunk there.
|
||||
* If there is enough room in the active allocation block, always
|
||||
* allocate the chunk there.
|
||||
*/
|
||||
|
||||
if ((block = set->blocks) != NULL)
|
||||
@@ -261,8 +261,8 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* Otherwise, if requested size exceeds smallchunk limit,
|
||||
* allocate an entire separate block for this allocation
|
||||
* Otherwise, if requested size exceeds smallchunk limit, allocate an
|
||||
* entire separate block for this allocation
|
||||
*
|
||||
*/
|
||||
if (block == NULL && size > ALLOC_SMALLCHUNK_LIMIT)
|
||||
@@ -272,9 +272,9 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
if (block == NULL)
|
||||
elog(FATAL, "Memory exhausted in AllocSetAlloc()");
|
||||
block->aset = set;
|
||||
block->freeptr = block->endptr = ((char *)block) + blksize;
|
||||
block->freeptr = block->endptr = ((char *) block) + blksize;
|
||||
|
||||
chunk = (AllocChunk) (((char *)block) + ALLOC_BLOCKHDRSZ);
|
||||
chunk = (AllocChunk) (((char *) block) + ALLOC_BLOCKHDRSZ);
|
||||
chunk->aset = set;
|
||||
chunk->size = chunk_size;
|
||||
|
||||
@@ -310,8 +310,11 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
{
|
||||
/* Get size of prior block */
|
||||
blksize = set->blocks->endptr - ((char *) set->blocks);
|
||||
/* Special case: if very first allocation was for a large chunk,
|
||||
* could have a funny-sized top block. Do something reasonable.
|
||||
|
||||
/*
|
||||
* Special case: if very first allocation was for a large
|
||||
* chunk, could have a funny-sized top block. Do something
|
||||
* reasonable.
|
||||
*/
|
||||
if (blksize < ALLOC_MIN_BLOCK_SIZE)
|
||||
blksize = ALLOC_MIN_BLOCK_SIZE;
|
||||
@@ -321,12 +324,13 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
blksize = ALLOC_MAX_BLOCK_SIZE;
|
||||
/* Try to allocate it */
|
||||
block = (AllocBlock) malloc(blksize);
|
||||
|
||||
/*
|
||||
* We could be asking for pretty big blocks here, so cope if
|
||||
* malloc fails. But give up if there's less than a meg or so
|
||||
* available...
|
||||
*/
|
||||
while (block == NULL && blksize > 1024*1024)
|
||||
while (block == NULL && blksize > 1024 * 1024)
|
||||
{
|
||||
blksize >>= 1;
|
||||
block = (AllocBlock) malloc(blksize);
|
||||
@@ -336,8 +340,8 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
if (block == NULL)
|
||||
elog(FATAL, "Memory exhausted in AllocSetAlloc()");
|
||||
block->aset = set;
|
||||
block->freeptr = ((char *)block) + ALLOC_BLOCKHDRSZ;
|
||||
block->endptr = ((char *)block) + blksize;
|
||||
block->freeptr = ((char *) block) + ALLOC_BLOCKHDRSZ;
|
||||
block->endptr = ((char *) block) + blksize;
|
||||
block->next = set->blocks;
|
||||
|
||||
set->blocks = block;
|
||||
@@ -346,8 +350,8 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
/*
|
||||
* OK, do the allocation
|
||||
*/
|
||||
chunk = (AllocChunk)(block->freeptr);
|
||||
chunk->aset = (void *)set;
|
||||
chunk = (AllocChunk) (block->freeptr);
|
||||
chunk->aset = (void *) set;
|
||||
chunk->size = chunk_size;
|
||||
block->freeptr += (chunk_size + ALLOC_CHUNKHDRSZ);
|
||||
Assert(block->freeptr <= block->endptr);
|
||||
@@ -356,7 +360,7 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* AllocSetFree
|
||||
* AllocSetFree
|
||||
* Frees allocated memory; memory is removed from the set.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -367,8 +371,8 @@ AllocSetAlloc(AllocSet set, Size size)
|
||||
void
|
||||
AllocSetFree(AllocSet set, AllocPointer pointer)
|
||||
{
|
||||
int fidx;
|
||||
AllocChunk chunk;
|
||||
int fidx;
|
||||
AllocChunk chunk;
|
||||
|
||||
/* AssertArg(AllocSetIsValid(set)); */
|
||||
/* AssertArg(AllocPointerIsValid(pointer)); */
|
||||
@@ -377,12 +381,12 @@ AllocSetFree(AllocSet set, AllocPointer pointer)
|
||||
chunk = AllocPointerGetChunk(pointer);
|
||||
fidx = AllocSetFreeIndex(chunk->size);
|
||||
|
||||
chunk->aset = (void *)set->freelist[fidx];
|
||||
chunk->aset = (void *) set->freelist[fidx];
|
||||
set->freelist[fidx] = chunk;
|
||||
}
|
||||
|
||||
/*
|
||||
* AllocSetRealloc
|
||||
* AllocSetRealloc
|
||||
* Returns new pointer to allocated memory of given size; this memory
|
||||
* is added to the set. Memory associated with given pointer is copied
|
||||
* into the new memory, and the old memory is freed.
|
||||
@@ -404,8 +408,8 @@ AllocSetRealloc(AllocSet set, AllocPointer pointer, Size size)
|
||||
AssertArg(AllocSetContains(set, pointer));
|
||||
|
||||
/*
|
||||
* Chunk sizes are aligned to power of 2 on AllocSetAlloc().
|
||||
* Maybe the allocated area already is >= the new size.
|
||||
* Chunk sizes are aligned to power of 2 on AllocSetAlloc(). Maybe the
|
||||
* allocated area already is >= the new size.
|
||||
*
|
||||
*/
|
||||
oldsize = AllocPointerGetSize(pointer);
|
||||
@@ -425,7 +429,7 @@ AllocSetRealloc(AllocSet set, AllocPointer pointer, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* AllocSetDump
|
||||
* AllocSetDump
|
||||
* Displays allocated set.
|
||||
*/
|
||||
void
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.13 1999/03/22 16:45:27 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.14 1999/05/25 16:12:53 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -54,7 +54,7 @@ static OrderedSetData ActiveGlobalMemorySetData; /* uninitialized */
|
||||
#define PSIZESPACE(LEN) ((LEN) + sizeof (int32))
|
||||
|
||||
/*
|
||||
* AllocSizeIsValid
|
||||
* AllocSizeIsValid
|
||||
* True iff 0 < size and size <= MaxAllocSize.
|
||||
*/
|
||||
#define AllocSizeIsValid(size) (0 < (size) && (size) <= MaxAllocSize)
|
||||
@@ -64,7 +64,7 @@ static OrderedSetData ActiveGlobalMemorySetData; /* uninitialized */
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* CurrentMemoryContext
|
||||
* CurrentMemoryContext
|
||||
* Memory context for general global allocations.
|
||||
*/
|
||||
DLLIMPORT MemoryContext CurrentMemoryContext = NULL;
|
||||
@@ -106,14 +106,14 @@ static struct MemoryContextMethodsData GlobalContextMethodsData = {
|
||||
static struct GlobalMemoryData TopGlobalMemoryData = {
|
||||
T_GlobalMemory, /* NodeTag tag */
|
||||
&GlobalContextMethodsData, /* ContextMethods method */
|
||||
{ NULL, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }},
|
||||
/* free AllocSet */
|
||||
{NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}},
|
||||
/* free AllocSet */
|
||||
"TopGlobal", /* char* name */
|
||||
{0} /* uninitialized OrderedElemData elemD */
|
||||
};
|
||||
|
||||
/*
|
||||
* TopMemoryContext
|
||||
* TopMemoryContext
|
||||
* Memory context for general global allocations.
|
||||
*
|
||||
* Note:
|
||||
@@ -131,7 +131,7 @@ MemoryContext TopMemoryContext = (MemoryContext) &TopGlobalMemoryData;
|
||||
*/
|
||||
|
||||
/*
|
||||
* EnableMemoryContext
|
||||
* EnableMemoryContext
|
||||
* Enables/disables memory management and global contexts.
|
||||
*
|
||||
* Note:
|
||||
@@ -207,7 +207,7 @@ EnableMemoryContext(bool on)
|
||||
}
|
||||
|
||||
/*
|
||||
* MemoryContextAlloc
|
||||
* MemoryContextAlloc
|
||||
* Returns pointer to aligned allocated memory in the given context.
|
||||
*
|
||||
* Note:
|
||||
@@ -231,7 +231,7 @@ MemoryContextAlloc(MemoryContext context, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* MemoryContextFree
|
||||
* MemoryContextFree
|
||||
* Frees allocated memory referenced by pointer in the given context.
|
||||
*
|
||||
* Note:
|
||||
@@ -252,7 +252,7 @@ MemoryContextFree(MemoryContext context, Pointer pointer)
|
||||
}
|
||||
|
||||
/*
|
||||
* MemoryContextRelloc
|
||||
* MemoryContextRelloc
|
||||
* Returns pointer to aligned allocated memory in the given context.
|
||||
*
|
||||
* Note:
|
||||
@@ -278,7 +278,7 @@ MemoryContextRealloc(MemoryContext context,
|
||||
}
|
||||
|
||||
/*
|
||||
* MemoryContextGetName
|
||||
* MemoryContextGetName
|
||||
* Returns pointer to aligned allocated memory in the given context.
|
||||
*
|
||||
* Note:
|
||||
@@ -301,7 +301,7 @@ MemoryContextGetName(MemoryContext context)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PointerGetAllocSize
|
||||
* PointerGetAllocSize
|
||||
* Returns size of aligned allocated memory given pointer to it.
|
||||
*
|
||||
* Note:
|
||||
@@ -324,7 +324,7 @@ PointerGetAllocSize(Pointer pointer)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* MemoryContextSwitchTo
|
||||
* MemoryContextSwitchTo
|
||||
* Returns the current context; installs the given context.
|
||||
*
|
||||
* Note:
|
||||
@@ -351,7 +351,7 @@ MemoryContextSwitchTo(MemoryContext context)
|
||||
* External Functions
|
||||
*/
|
||||
/*
|
||||
* CreateGlobalMemory
|
||||
* CreateGlobalMemory
|
||||
* Returns new global memory context.
|
||||
*
|
||||
* Note:
|
||||
@@ -385,7 +385,7 @@ CreateGlobalMemory(char *name) /* XXX MemoryContextName */
|
||||
}
|
||||
|
||||
/*
|
||||
* GlobalMemoryDestroy
|
||||
* GlobalMemoryDestroy
|
||||
* Destroys given global memory context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -413,7 +413,7 @@ GlobalMemoryDestroy(GlobalMemory context)
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* GlobalMemoryAlloc
|
||||
* GlobalMemoryAlloc
|
||||
* Returns pointer to aligned space in the global context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -426,7 +426,7 @@ GlobalMemoryAlloc(GlobalMemory this, Size size)
|
||||
}
|
||||
|
||||
/*
|
||||
* GlobalMemoryFree
|
||||
* GlobalMemoryFree
|
||||
* Frees allocated memory in the global context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -441,7 +441,7 @@ GlobalMemoryFree(GlobalMemory this,
|
||||
}
|
||||
|
||||
/*
|
||||
* GlobalMemoryRealloc
|
||||
* GlobalMemoryRealloc
|
||||
* Returns pointer to aligned space in the global context.
|
||||
*
|
||||
* Note:
|
||||
@@ -461,7 +461,7 @@ GlobalMemoryRealloc(GlobalMemory this,
|
||||
}
|
||||
|
||||
/*
|
||||
* GlobalMemoryGetName
|
||||
* GlobalMemoryGetName
|
||||
* Returns name string for context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -474,7 +474,7 @@ GlobalMemoryGetName(GlobalMemory this)
|
||||
}
|
||||
|
||||
/*
|
||||
* GlobalMemoryDump
|
||||
* GlobalMemoryDump
|
||||
* Dumps global memory context for debugging.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -499,7 +499,7 @@ GlobalMemoryDump(GlobalMemory this)
|
||||
}
|
||||
|
||||
/*
|
||||
* DumpGlobalMemories
|
||||
* DumpGlobalMemories
|
||||
* Dumps all global memory contexts for debugging.
|
||||
*
|
||||
* Exceptions:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.11 1999/02/13 23:20:10 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.12 1999/05/25 16:12:54 momjian Exp $
|
||||
*
|
||||
* NOTE
|
||||
* XXX This is a preliminary implementation which lacks fail-fast
|
||||
@@ -24,7 +24,7 @@ static void OrderedElemPush(OrderedElem elem);
|
||||
static void OrderedElemPushHead(OrderedElem elem);
|
||||
|
||||
/*
|
||||
* OrderedElemGetBase
|
||||
* OrderedElemGetBase
|
||||
* Returns base of enclosing structure.
|
||||
*/
|
||||
static Pointer
|
||||
@@ -37,7 +37,7 @@ OrderedElemGetBase(OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedSetInit
|
||||
* OrderedSetInit
|
||||
*/
|
||||
void
|
||||
OrderedSetInit(OrderedSet set, Offset offset)
|
||||
@@ -49,7 +49,7 @@ OrderedSetInit(OrderedSet set, Offset offset)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedSetContains
|
||||
* OrderedSetContains
|
||||
* True iff ordered set contains given element.
|
||||
*/
|
||||
bool
|
||||
@@ -59,7 +59,7 @@ OrderedSetContains(OrderedSet set, OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedSetGetHead
|
||||
* OrderedSetGetHead
|
||||
*/
|
||||
Pointer
|
||||
OrderedSetGetHead(OrderedSet set)
|
||||
@@ -73,7 +73,7 @@ OrderedSetGetHead(OrderedSet set)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedSetGetTail
|
||||
* OrderedSetGetTail
|
||||
*/
|
||||
#ifdef NOT_USED
|
||||
Pointer
|
||||
@@ -90,7 +90,7 @@ OrderedSetGetTail(OrderedSet set)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* OrderedElemGetPredecessor
|
||||
* OrderedElemGetPredecessor
|
||||
*/
|
||||
Pointer
|
||||
OrderedElemGetPredecessor(OrderedElem elem)
|
||||
@@ -102,7 +102,7 @@ OrderedElemGetPredecessor(OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedElemGetSuccessor
|
||||
* OrderedElemGetSuccessor
|
||||
*/
|
||||
Pointer
|
||||
OrderedElemGetSuccessor(OrderedElem elem)
|
||||
@@ -114,7 +114,7 @@ OrderedElemGetSuccessor(OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedElemPop
|
||||
* OrderedElemPop
|
||||
*/
|
||||
void
|
||||
OrderedElemPop(OrderedElem elem)
|
||||
@@ -127,7 +127,7 @@ OrderedElemPop(OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedElemPushInto
|
||||
* OrderedElemPushInto
|
||||
*/
|
||||
void
|
||||
OrderedElemPushInto(OrderedElem elem, OrderedSet set)
|
||||
@@ -140,7 +140,7 @@ OrderedElemPushInto(OrderedElem elem, OrderedSet set)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedElemPush
|
||||
* OrderedElemPush
|
||||
*/
|
||||
static void
|
||||
OrderedElemPush(OrderedElem elem)
|
||||
@@ -149,7 +149,7 @@ OrderedElemPush(OrderedElem elem)
|
||||
}
|
||||
|
||||
/*
|
||||
* OrderedElemPushHead
|
||||
* OrderedElemPushHead
|
||||
*/
|
||||
static void
|
||||
OrderedElemPushHead(OrderedElem elem)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/palloc.c,v 1.11 1999/02/13 23:20:11 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/palloc.c,v 1.12 1999/05/25 16:12:54 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -36,7 +36,7 @@
|
||||
char *
|
||||
pstrdup(char *string)
|
||||
{
|
||||
char *nstr;
|
||||
char *nstr;
|
||||
int len;
|
||||
|
||||
nstr = palloc(len = strlen(string) + 1);
|
||||
@@ -44,4 +44,3 @@ pstrdup(char *string)
|
||||
|
||||
return nstr;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.18 1999/02/13 23:20:12 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.19 1999/05/25 16:12:55 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -50,7 +50,7 @@
|
||||
*
|
||||
* Here is an old comment taken from nodes/memnodes.h
|
||||
*
|
||||
* MemoryContext
|
||||
* MemoryContext
|
||||
* A logical context in which memory allocations occur.
|
||||
*
|
||||
* The types of memory contexts can be thought of as members of the
|
||||
@@ -517,7 +517,7 @@ DumpPortals()
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
/*
|
||||
* EnablePortalManager
|
||||
* EnablePortalManager
|
||||
* Enables/disables the portal management module.
|
||||
*/
|
||||
void
|
||||
@@ -579,7 +579,7 @@ EnablePortalManager(bool on)
|
||||
}
|
||||
|
||||
/*
|
||||
* GetPortalByName
|
||||
* GetPortalByName
|
||||
* Returns a portal given a portal name; returns blank portal given
|
||||
* NULL; returns invalid portal if portal not found.
|
||||
*
|
||||
@@ -606,7 +606,7 @@ GetPortalByName(char *name)
|
||||
}
|
||||
|
||||
/*
|
||||
* BlankPortalAssignName
|
||||
* BlankPortalAssignName
|
||||
* Returns former blank portal as portal with given name.
|
||||
*
|
||||
* Side effect:
|
||||
@@ -659,7 +659,7 @@ BlankPortalAssignName(char *name) /* XXX PortalName */
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalSetQuery
|
||||
* PortalSetQuery
|
||||
* Attaches a "query" to portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -686,7 +686,7 @@ PortalSetQuery(Portal portal,
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalGetQueryDesc
|
||||
* PortalGetQueryDesc
|
||||
* Returns query attached to portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -703,7 +703,7 @@ PortalGetQueryDesc(Portal portal)
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalGetState
|
||||
* PortalGetState
|
||||
* Returns state attached to portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -720,7 +720,7 @@ PortalGetState(Portal portal)
|
||||
}
|
||||
|
||||
/*
|
||||
* CreatePortal
|
||||
* CreatePortal
|
||||
* Returns a new portal given a name.
|
||||
*
|
||||
* Note:
|
||||
@@ -784,7 +784,7 @@ CreatePortal(char *name) /* XXX PortalName */
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalDestroy
|
||||
* PortalDestroy
|
||||
* Destroys portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -813,22 +813,22 @@ PortalDestroy(Portal *portalP)
|
||||
AllocSetReset(&portal->variable.setData); /* XXX log */
|
||||
|
||||
/*
|
||||
* In the case of a transaction abort it is possible that
|
||||
* we get called while one of the memory contexts of the portal
|
||||
* we're destroying is the current memory context.
|
||||
*
|
||||
* Don't know how to handle that cleanly because it is required
|
||||
* to be in that context right now. This portal struct remains
|
||||
* allocated in the PortalMemory context until backend dies.
|
||||
* In the case of a transaction abort it is possible that we get
|
||||
* called while one of the memory contexts of the portal we're
|
||||
* destroying is the current memory context.
|
||||
*
|
||||
* Not happy with that, but it's better to loose some bytes of
|
||||
* memory than to have the backend dump core.
|
||||
* Don't know how to handle that cleanly because it is required to be in
|
||||
* that context right now. This portal struct remains allocated in the
|
||||
* PortalMemory context until backend dies.
|
||||
*
|
||||
* Not happy with that, but it's better to loose some bytes of memory
|
||||
* than to have the backend dump core.
|
||||
*
|
||||
* --- Feb. 04, 1999 Jan Wieck
|
||||
*/
|
||||
if (CurrentMemoryContext == (MemoryContext)PortalGetHeapMemory(portal))
|
||||
if (CurrentMemoryContext == (MemoryContext) PortalGetHeapMemory(portal))
|
||||
return;
|
||||
if (CurrentMemoryContext == (MemoryContext)PortalGetVariableMemory(portal))
|
||||
if (CurrentMemoryContext == (MemoryContext) PortalGetVariableMemory(portal))
|
||||
return;
|
||||
|
||||
if (portal != BlankPortal)
|
||||
@@ -836,7 +836,7 @@ PortalDestroy(Portal *portalP)
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* PortalResetHeapMemory
|
||||
* PortalResetHeapMemory
|
||||
* Resets portal's heap memory context.
|
||||
*
|
||||
* Someday, Reset, Start, and End can be optimized by keeping a global
|
||||
@@ -873,7 +873,7 @@ PortalResetHeapMemory(Portal portal)
|
||||
}
|
||||
|
||||
/*
|
||||
* StartPortalAllocMode
|
||||
* StartPortalAllocMode
|
||||
* Starts a new block of portal heap allocation using mode and limit;
|
||||
* the current block is disabled until EndPortalAllocMode is called.
|
||||
*
|
||||
@@ -904,7 +904,7 @@ StartPortalAllocMode(AllocMode mode, Size limit)
|
||||
/* allocate and initialize new block */
|
||||
context->block = MemoryContextAlloc(
|
||||
(MemoryContext) PortalHeapMemoryGetVariableMemory(context),
|
||||
sizeof(HeapMemoryBlockData));
|
||||
sizeof(HeapMemoryBlockData));
|
||||
|
||||
/* XXX careful, context->block has never been stacked => bad state */
|
||||
|
||||
@@ -912,7 +912,7 @@ StartPortalAllocMode(AllocMode mode, Size limit)
|
||||
}
|
||||
|
||||
/*
|
||||
* EndPortalAllocMode
|
||||
* EndPortalAllocMode
|
||||
* Ends current block of portal heap allocation; previous block is
|
||||
* reenabled.
|
||||
*
|
||||
@@ -944,7 +944,7 @@ EndPortalAllocMode()
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalGetVariableMemory
|
||||
* PortalGetVariableMemory
|
||||
* Returns variable memory context for a given portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -958,7 +958,7 @@ PortalGetVariableMemory(Portal portal)
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalGetHeapMemory
|
||||
* PortalGetHeapMemory
|
||||
* Returns heap memory context for a given portal.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -972,7 +972,7 @@ PortalGetHeapMemory(Portal portal)
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalVariableMemoryGetPortal
|
||||
* PortalVariableMemoryGetPortal
|
||||
* Returns portal containing given variable memory context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -986,7 +986,7 @@ PortalVariableMemoryGetPortal(PortalVariableMemory context)
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalHeapMemoryGetPortal
|
||||
* PortalHeapMemoryGetPortal
|
||||
* Returns portal containing given heap memory context.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -1000,7 +1000,7 @@ PortalHeapMemoryGetPortal(PortalHeapMemory context)
|
||||
}
|
||||
|
||||
/*
|
||||
* PortalVariableMemoryGetHeapMemory
|
||||
* PortalVariableMemoryGetHeapMemory
|
||||
* Returns heap memory context associated with given variable memory.
|
||||
*
|
||||
* Exceptions:
|
||||
@@ -1019,7 +1019,7 @@ PortalVariableMemoryGetHeapMemory(PortalVariableMemory context)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PortalHeapMemoryGetVariableMemory
|
||||
* PortalHeapMemoryGetVariableMemory
|
||||
* Returns variable memory context associated with given heap memory.
|
||||
*
|
||||
* Exceptions:
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: psort.c,v 1.51 1999/05/09 00:53:22 tgl Exp $
|
||||
* $Id: psort.c,v 1.52 1999/05/25 16:12:59 momjian Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Sorts the first relation into the second relation.
|
||||
@@ -55,9 +55,9 @@
|
||||
#include "utils/rel.h"
|
||||
|
||||
static bool createfirstrun(Sort *node);
|
||||
static bool createrun(Sort *node, BufFile *file);
|
||||
static void destroytape(BufFile *file);
|
||||
static void dumptuples(BufFile *file, Sort *node);
|
||||
static bool createrun(Sort *node, BufFile * file);
|
||||
static void destroytape(BufFile * file);
|
||||
static void dumptuples(BufFile * file, Sort *node);
|
||||
static BufFile *gettape(void);
|
||||
static void initialrun(Sort *node);
|
||||
static void inittapes(Sort *node);
|
||||
@@ -320,15 +320,11 @@ initialrun(Sort *node)
|
||||
tp->tp_dummy--;
|
||||
PS(node)->TotalDummy--;
|
||||
if (tp->tp_dummy < (tp + 1)->tp_dummy)
|
||||
{
|
||||
tp++;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
if (tp->tp_dummy != 0)
|
||||
{
|
||||
tp = PS(node)->Tape;
|
||||
}
|
||||
else
|
||||
{
|
||||
PS(node)->Level++;
|
||||
@@ -337,13 +333,13 @@ initialrun(Sort *node)
|
||||
tp - PS(node)->Tape < PS(node)->TapeRange; tp++)
|
||||
{
|
||||
PS(node)->TotalDummy += (tp->tp_dummy = baseruns
|
||||
+ (tp + 1)->tp_fib
|
||||
- tp->tp_fib);
|
||||
+ (tp + 1)->tp_fib
|
||||
- tp->tp_fib);
|
||||
tp->tp_fib = baseruns
|
||||
+ (tp + 1)->tp_fib;
|
||||
}
|
||||
tp = PS(node)->Tape;/* D4 */
|
||||
} /* D3 */
|
||||
tp = PS(node)->Tape; /* D4 */
|
||||
} /* D3 */
|
||||
}
|
||||
if (extrapasses)
|
||||
{
|
||||
@@ -354,9 +350,7 @@ initialrun(Sort *node)
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((bool) createrun(node, tp->tp_file) == false)
|
||||
extrapasses = 1 + (PS(node)->Tuples != NULL);
|
||||
@@ -479,7 +473,7 @@ createfirstrun(Sort *node)
|
||||
* Tuples contains the tuples for the following run upon exit
|
||||
*/
|
||||
static bool
|
||||
createrun(Sort *node, BufFile *file)
|
||||
createrun(Sort *node, BufFile * file)
|
||||
{
|
||||
HeapTuple lasttuple;
|
||||
HeapTuple tup;
|
||||
@@ -554,9 +548,7 @@ createrun(Sort *node, BufFile *file)
|
||||
memtuples[t_last] = tup;
|
||||
}
|
||||
else
|
||||
{
|
||||
puttuple(&PS(node)->Tuples, tup, 0, &PS(node)->treeContext);
|
||||
}
|
||||
}
|
||||
if (lasttuple != NULL)
|
||||
{
|
||||
@@ -627,7 +619,7 @@ merge(Sort *node, struct tape * dest)
|
||||
struct tape *lasttp; /* (TAPE[P]) */
|
||||
struct tape *tp;
|
||||
struct leftist *tuples;
|
||||
BufFile *destfile;
|
||||
BufFile *destfile;
|
||||
int times; /* runs left to merge */
|
||||
int outdummy; /* complete dummy runs */
|
||||
short fromtape;
|
||||
@@ -644,10 +636,9 @@ merge(Sort *node, struct tape * dest)
|
||||
tp->tp_fib += times;
|
||||
/* Tape[].tp_fib (A[]) is set to proper exit values */
|
||||
|
||||
if (PS(node)->TotalDummy < PS(node)->TapeRange) /* no complete dummy runs */
|
||||
{
|
||||
if (PS(node)->TotalDummy < PS(node)->TapeRange) /* no complete dummy
|
||||
* runs */
|
||||
outdummy = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outdummy = PS(node)->TotalDummy; /* a large positive number */
|
||||
@@ -729,7 +720,7 @@ merge(Sort *node, struct tape * dest)
|
||||
* dumptuples - stores all the tuples in tree into file
|
||||
*/
|
||||
static void
|
||||
dumptuples(BufFile *file, Sort *node)
|
||||
dumptuples(BufFile * file, Sort *node)
|
||||
{
|
||||
struct leftist *tp;
|
||||
struct leftist *newp;
|
||||
@@ -812,7 +803,7 @@ psort_grabtuple(Sort *node, bool *should_free)
|
||||
* file
|
||||
*/
|
||||
BufFileSeek(PS(node)->psort_grab_file,
|
||||
PS(node)->psort_current - sizeof(tlendummy), SEEK_SET);
|
||||
PS(node)->psort_current - sizeof(tlendummy), SEEK_SET);
|
||||
GETLEN(tuplen, PS(node)->psort_grab_file);
|
||||
if (PS(node)->psort_current < tuplen)
|
||||
elog(ERROR, "psort_grabtuple: too big last tuple len in backward scan");
|
||||
@@ -845,7 +836,7 @@ psort_grabtuple(Sort *node, bool *should_free)
|
||||
PS(node)->psort_current -= tuplen;
|
||||
/* move to position of end tlen of prev tuple */
|
||||
BufFileSeek(PS(node)->psort_grab_file,
|
||||
PS(node)->psort_current - sizeof(tlendummy), SEEK_SET);
|
||||
PS(node)->psort_current - sizeof(tlendummy), SEEK_SET);
|
||||
GETLEN(tuplen, PS(node)->psort_grab_file);
|
||||
if (PS(node)->psort_current < tuplen + sizeof(tlendummy))
|
||||
elog(ERROR, "psort_grabtuple: too big tuple len in backward scan");
|
||||
@@ -1005,7 +996,7 @@ gettape()
|
||||
* destroytape - unlinks the tape
|
||||
*/
|
||||
static void
|
||||
destroytape(BufFile *file)
|
||||
destroytape(BufFile * file)
|
||||
{
|
||||
BufFileClose(file);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.28 1999/04/12 16:57:27 vadim Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.29 1999/05/25 16:13:02 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -26,11 +26,11 @@
|
||||
|
||||
extern bool PostgresIsInitialized;
|
||||
|
||||
SnapshotData SnapshotDirtyData;
|
||||
Snapshot SnapshotDirty = &SnapshotDirtyData;
|
||||
SnapshotData SnapshotDirtyData;
|
||||
Snapshot SnapshotDirty = &SnapshotDirtyData;
|
||||
|
||||
Snapshot QuerySnapshot = NULL;
|
||||
Snapshot SerializableSnapshot = NULL;
|
||||
Snapshot QuerySnapshot = NULL;
|
||||
Snapshot SerializableSnapshot = NULL;
|
||||
|
||||
/*
|
||||
* XXX Transaction system override hacks start here
|
||||
@@ -59,7 +59,7 @@ setheapoverride(bool on)
|
||||
*/
|
||||
|
||||
/*
|
||||
* HeapTupleSatisfiesItself
|
||||
* HeapTupleSatisfiesItself
|
||||
* True iff heap tuple is valid for "itself."
|
||||
* "{it}self" means valid as of everything that's happened
|
||||
* in the current transaction, _including_ the current command.
|
||||
@@ -91,7 +91,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
|
||||
|
||||
if (tuple->t_infomask & HEAP_MOVED_OFF)
|
||||
{
|
||||
if (TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -99,7 +99,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
|
||||
}
|
||||
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
||||
{
|
||||
if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -130,7 +130,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
|
||||
{
|
||||
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
|
||||
return true;
|
||||
return false; /* updated by other */
|
||||
return false; /* updated by other */
|
||||
}
|
||||
|
||||
if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
|
||||
@@ -157,7 +157,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple)
|
||||
}
|
||||
|
||||
/*
|
||||
* HeapTupleSatisfiesNow
|
||||
* HeapTupleSatisfiesNow
|
||||
* True iff heap tuple is valid "now."
|
||||
* "now" means valid including everything that's happened
|
||||
* in the current transaction _up to, but not including,_
|
||||
@@ -218,7 +218,7 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
|
||||
|
||||
if (tuple->t_infomask & HEAP_MOVED_OFF)
|
||||
{
|
||||
if (TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -226,7 +226,7 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
|
||||
}
|
||||
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
||||
{
|
||||
if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -300,19 +300,19 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple)
|
||||
int
|
||||
HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
{
|
||||
HeapTupleHeader th = tuple->t_data;
|
||||
HeapTupleHeader th = tuple->t_data;
|
||||
|
||||
if (AMI_OVERRIDE)
|
||||
return HeapTupleMayBeUpdated;
|
||||
|
||||
if (!(th->t_infomask & HEAP_XMIN_COMMITTED))
|
||||
{
|
||||
if (th->t_infomask & HEAP_XMIN_INVALID) /* xid invalid or aborted */
|
||||
if (th->t_infomask & HEAP_XMIN_INVALID) /* xid invalid or aborted */
|
||||
return HeapTupleInvisible;
|
||||
|
||||
if (th->t_infomask & HEAP_MOVED_OFF)
|
||||
{
|
||||
if (TransactionIdDidCommit((TransactionId)th->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) th->t_cmin))
|
||||
{
|
||||
th->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return HeapTupleInvisible;
|
||||
@@ -320,7 +320,7 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
}
|
||||
else if (th->t_infomask & HEAP_MOVED_IN)
|
||||
{
|
||||
if (!TransactionIdDidCommit((TransactionId)th->t_cmin))
|
||||
if (!TransactionIdDidCommit((TransactionId) th->t_cmin))
|
||||
{
|
||||
th->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return HeapTupleInvisible;
|
||||
@@ -329,9 +329,10 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
else if (TransactionIdIsCurrentTransactionId(th->t_xmin))
|
||||
{
|
||||
if (CommandIdGEScanCommandId(th->t_cmin) && !heapisoverride())
|
||||
return HeapTupleInvisible; /* inserted after scan started */
|
||||
return HeapTupleInvisible; /* inserted after scan
|
||||
* started */
|
||||
|
||||
if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid */
|
||||
if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid */
|
||||
return HeapTupleMayBeUpdated;
|
||||
|
||||
Assert(TransactionIdIsCurrentTransactionId(th->t_xmax));
|
||||
@@ -340,14 +341,16 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
return HeapTupleMayBeUpdated;
|
||||
|
||||
if (CommandIdGEScanCommandId(th->t_cmax))
|
||||
return HeapTupleSelfUpdated;/* updated after scan started */
|
||||
return HeapTupleSelfUpdated; /* updated after scan
|
||||
* started */
|
||||
else
|
||||
return HeapTupleInvisible; /* updated before scan started */
|
||||
return HeapTupleInvisible; /* updated before scan
|
||||
* started */
|
||||
}
|
||||
else if (!TransactionIdDidCommit(th->t_xmin))
|
||||
{
|
||||
if (TransactionIdDidAbort(th->t_xmin))
|
||||
th->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
|
||||
th->t_infomask |= HEAP_XMIN_INVALID; /* aborted */
|
||||
return HeapTupleInvisible;
|
||||
}
|
||||
th->t_infomask |= HEAP_XMIN_COMMITTED;
|
||||
@@ -355,14 +358,14 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
|
||||
/* by here, the inserting transaction has committed */
|
||||
|
||||
if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid or aborted */
|
||||
if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid or aborted */
|
||||
return HeapTupleMayBeUpdated;
|
||||
|
||||
if (th->t_infomask & HEAP_XMAX_COMMITTED)
|
||||
{
|
||||
if (th->t_infomask & HEAP_MARKED_FOR_UPDATE)
|
||||
return HeapTupleMayBeUpdated;
|
||||
return HeapTupleUpdated; /* updated by other */
|
||||
return HeapTupleUpdated;/* updated by other */
|
||||
}
|
||||
|
||||
if (TransactionIdIsCurrentTransactionId(th->t_xmax))
|
||||
@@ -370,7 +373,8 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
if (th->t_infomask & HEAP_MARKED_FOR_UPDATE)
|
||||
return HeapTupleMayBeUpdated;
|
||||
if (CommandIdGEScanCommandId(th->t_cmax))
|
||||
return HeapTupleSelfUpdated;/* updated after scan started */
|
||||
return HeapTupleSelfUpdated; /* updated after scan
|
||||
* started */
|
||||
else
|
||||
return HeapTupleInvisible; /* updated before scan started */
|
||||
}
|
||||
@@ -392,7 +396,7 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple)
|
||||
if (th->t_infomask & HEAP_MARKED_FOR_UPDATE)
|
||||
return HeapTupleMayBeUpdated;
|
||||
|
||||
return HeapTupleUpdated; /* updated by other */
|
||||
return HeapTupleUpdated; /* updated by other */
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -411,13 +415,14 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
|
||||
if (tuple->t_infomask & HEAP_MOVED_OFF)
|
||||
{
|
||||
|
||||
/*
|
||||
* HeapTupleSatisfiesDirty is used by unique btree-s and so
|
||||
* may be used while vacuuming.
|
||||
*/
|
||||
if (TransactionIdIsCurrentTransactionId((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
|
||||
return false;
|
||||
if (TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -426,9 +431,9 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
}
|
||||
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
||||
{
|
||||
if (!TransactionIdIsCurrentTransactionId((TransactionId)tuple->t_cmin))
|
||||
if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
if (TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
|
||||
else
|
||||
{
|
||||
@@ -457,7 +462,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
return false;
|
||||
}
|
||||
SnapshotDirty->xmin = tuple->t_xmin;
|
||||
return true; /* in insertion by other */
|
||||
return true; /* in insertion by other */
|
||||
}
|
||||
else
|
||||
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
|
||||
@@ -473,7 +478,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE)
|
||||
return true;
|
||||
SnapshotDirty->tid = tuple->t_ctid;
|
||||
return false; /* updated by other */
|
||||
return false; /* updated by other */
|
||||
}
|
||||
|
||||
if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
|
||||
@@ -488,7 +493,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
}
|
||||
/* running xact */
|
||||
SnapshotDirty->xmax = tuple->t_xmax;
|
||||
return true; /* in updation by other */
|
||||
return true; /* in updation by other */
|
||||
}
|
||||
|
||||
/* xmax transaction committed */
|
||||
@@ -498,7 +503,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple)
|
||||
return true;
|
||||
|
||||
SnapshotDirty->tid = tuple->t_ctid;
|
||||
return false; /* updated by other */
|
||||
return false; /* updated by other */
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -514,7 +519,7 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
|
||||
|
||||
if (tuple->t_infomask & HEAP_MOVED_OFF)
|
||||
{
|
||||
if (TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -522,7 +527,7 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
|
||||
}
|
||||
else if (tuple->t_infomask & HEAP_MOVED_IN)
|
||||
{
|
||||
if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin))
|
||||
if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin))
|
||||
{
|
||||
tuple->t_infomask |= HEAP_XMIN_INVALID;
|
||||
return false;
|
||||
@@ -555,17 +560,17 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
|
||||
tuple->t_infomask |= HEAP_XMIN_COMMITTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* By here, the inserting transaction has committed -
|
||||
* have to check when...
|
||||
/*
|
||||
* By here, the inserting transaction has committed - have to check
|
||||
* when...
|
||||
*/
|
||||
|
||||
if (tuple->t_xmin >= snapshot->xmax)
|
||||
return false;
|
||||
if (tuple->t_xmin >= snapshot->xmin)
|
||||
{
|
||||
uint32 i;
|
||||
|
||||
uint32 i;
|
||||
|
||||
for (i = 0; i < snapshot->xcnt; i++)
|
||||
{
|
||||
if (tuple->t_xmin == snapshot->xip[i])
|
||||
@@ -584,15 +589,15 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
|
||||
if (TransactionIdIsCurrentTransactionId(tuple->t_xmax))
|
||||
{
|
||||
if (CommandIdGEScanCommandId(tuple->t_cmax))
|
||||
return true; /* deleted after scan started */
|
||||
return true; /* deleted after scan started */
|
||||
else
|
||||
return false; /* deleted before scan started */
|
||||
return false; /* deleted before scan started */
|
||||
}
|
||||
|
||||
if (!TransactionIdDidCommit(tuple->t_xmax))
|
||||
{
|
||||
if (TransactionIdDidAbort(tuple->t_xmax))
|
||||
tuple->t_infomask |= HEAP_XMAX_INVALID; /* aborted */
|
||||
tuple->t_infomask |= HEAP_XMAX_INVALID; /* aborted */
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -604,8 +609,8 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot)
|
||||
return true;
|
||||
if (tuple->t_xmax >= snapshot->xmin)
|
||||
{
|
||||
uint32 i;
|
||||
|
||||
uint32 i;
|
||||
|
||||
for (i = 0; i < snapshot->xcnt; i++)
|
||||
{
|
||||
if (tuple->t_xmax == snapshot->xip[i])
|
||||
|
||||
Reference in New Issue
Block a user