mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Add routines to help with single-byte (internal) character type support.
This commit is contained in:
parent
f9f4004b7c
commit
239564e9ef
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.19 1998/09/01 03:25:50 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.20 1998/12/13 23:35:48 thomas Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -29,7 +29,7 @@ int32
|
|||||||
charin(char *ch)
|
charin(char *ch)
|
||||||
{
|
{
|
||||||
if (ch == NULL)
|
if (ch == NULL)
|
||||||
return (int32) NULL;
|
return (int32) '\0';
|
||||||
return (int32) *ch;
|
return (int32) *ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,3 +153,21 @@ cideq(int8 arg1, int8 arg2)
|
|||||||
{
|
{
|
||||||
return arg1 == arg2;
|
return arg1 == arg2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8
|
||||||
|
text_char(text *arg1)
|
||||||
|
{
|
||||||
|
return ((int8) *(VARDATA(arg1)));
|
||||||
|
}
|
||||||
|
|
||||||
|
text *
|
||||||
|
char_text(int8 arg1)
|
||||||
|
{
|
||||||
|
text *result;
|
||||||
|
|
||||||
|
result = palloc(VARHDRSZ+1);
|
||||||
|
VARSIZE(result) = VARHDRSZ+1;
|
||||||
|
*(VARDATA(result)) = arg1;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.45 1998/12/08 06:19:15 thomas Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.46 1998/12/13 23:35:48 thomas Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -313,9 +313,8 @@ textcat(text *t1, text *t2)
|
|||||||
* - starting position (is one-based)
|
* - starting position (is one-based)
|
||||||
* - string length
|
* - string length
|
||||||
*
|
*
|
||||||
* If the starting position is zero or less, then return the entire string.
|
* If the starting position is zero or less, then return from the start of the string
|
||||||
* XXX Note that this may not be the right behavior:
|
* adjusting the length to be consistant with the "negative start" per SQL92.
|
||||||
* if we are calculating the starting position we might want it to start at one.
|
|
||||||
* If the length is less than zero, return the remaining string.
|
* If the length is less than zero, return the remaining string.
|
||||||
*
|
*
|
||||||
* Note that the arguments operate on octet length,
|
* Note that the arguments operate on octet length,
|
||||||
@ -323,6 +322,9 @@ textcat(text *t1, text *t2)
|
|||||||
*
|
*
|
||||||
* Added multi-byte support.
|
* Added multi-byte support.
|
||||||
* - Tatsuo Ishii 1998-4-21
|
* - Tatsuo Ishii 1998-4-21
|
||||||
|
* Changed behavior if starting position is less than one to conform to SQL92 behavior.
|
||||||
|
* Formerly returned the entire string; now returns a portion.
|
||||||
|
* - Thomas Lockhart 1998-12-10
|
||||||
*/
|
*/
|
||||||
text *
|
text *
|
||||||
text_substr(text *string, int32 m, int32 n)
|
text_substr(text *string, int32 m, int32 n)
|
||||||
@ -336,7 +338,7 @@ text_substr(text *string, int32 m, int32 n)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((string == (text *) NULL) || (m <= 0))
|
if (string == (text *) NULL)
|
||||||
return string;
|
return string;
|
||||||
|
|
||||||
len = VARSIZE(string) - VARHDRSZ;
|
len = VARSIZE(string) - VARHDRSZ;
|
||||||
@ -344,19 +346,25 @@ text_substr(text *string, int32 m, int32 n)
|
|||||||
len = pg_mbstrlen_with_len(VARDATA(string), len);
|
len = pg_mbstrlen_with_len(VARDATA(string), len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* m will now become a zero-based starting position */
|
/* starting position after the end of the string? */
|
||||||
if (m > len)
|
if (m > len)
|
||||||
{
|
{
|
||||||
m = 0;
|
m = 1;
|
||||||
n = 0;
|
n = 0;
|
||||||
}
|
}
|
||||||
else
|
/* starting position before the start of the string?
|
||||||
|
* then offset into the string per SQL92 spec... */
|
||||||
|
else if (m < 1)
|
||||||
{
|
{
|
||||||
m--;
|
n += (m-1);
|
||||||
if (((m + n) > len) || (n < 0))
|
m = 1;
|
||||||
n = (len - m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* m will now become a zero-based starting position */
|
||||||
|
m--;
|
||||||
|
if (((m + n) > len) || (n < 0))
|
||||||
|
n = (len - m);
|
||||||
|
|
||||||
#ifdef MULTIBYTE
|
#ifdef MULTIBYTE
|
||||||
p = VARDATA(string);
|
p = VARDATA(string);
|
||||||
for (i = 0; i < m; i++)
|
for (i = 0; i < m; i++)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: builtins.h,v 1.71 1998/12/08 06:18:34 thomas Exp $
|
* $Id: builtins.h,v 1.72 1998/12/13 23:36:48 thomas Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* This should normally only be included by fmgr.h.
|
* This should normally only be included by fmgr.h.
|
||||||
@ -60,6 +60,8 @@ extern int8 charmi(int8 arg1, int8 arg2);
|
|||||||
extern int8 charmul(int8 arg1, int8 arg2);
|
extern int8 charmul(int8 arg1, int8 arg2);
|
||||||
extern int8 chardiv(int8 arg1, int8 arg2);
|
extern int8 chardiv(int8 arg1, int8 arg2);
|
||||||
extern bool cideq(int8 arg1, int8 arg2);
|
extern bool cideq(int8 arg1, int8 arg2);
|
||||||
|
extern int8 text_char(text *arg1);
|
||||||
|
extern text* char_text(int8 arg1);
|
||||||
|
|
||||||
/* int.c */
|
/* int.c */
|
||||||
extern int32 int2in(char *num);
|
extern int32 int2in(char *num);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user