⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ascii.c

📁 PostgreSQL7.4.6 for Linux
💻 C
字号:
/*----------------------------------------------------------------------- * ascii.c *	 The PostgreSQL routine for string to ascii conversion. * *	 Portions Copyright (c) 1999-2003, PostgreSQL Global Development Group * * IDENTIFICATION *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/ascii.c,v 1.19 2003/09/26 15:27:36 petere Exp $ * *----------------------------------------------------------------------- */#include "postgres.h"#include "utils/builtins.h"#include "mb/pg_wchar.h"#include "utils/ascii.h"static void pg_to_ascii(unsigned char *src, unsigned char *src_end,			unsigned char *dest, int enc);static text *encode_to_ascii(text *data, int enc);/* ---------- * to_ascii * ---------- */static voidpg_to_ascii(unsigned char *src, unsigned char *src_end, unsigned char *dest, int enc){	unsigned char *x;	unsigned char *ascii;	int			range;	/*	 * relevant start for an encoding	 */#define RANGE_128	128#define RANGE_160	160	if (enc == PG_LATIN1)	{		/*		 * ISO-8859-1 <range: 160 -- 255>		 */		ascii = "  cL Y  \"Ca  -R     'u .,      ?AAAAAAACEEEEIIII NOOOOOxOUUUUYTBaaaaaaaceeeeiiii nooooo/ouuuuyty";		range = RANGE_160;	}	else if (enc == PG_LATIN2)	{		/*		 * ISO-8859-2 <range: 160 -- 255>		 */		ascii = " A L LS \"SSTZ-ZZ a,l'ls ,sstz\"zzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTBraaaalccceeeeiiddnnoooo/ruuuuyt.";		range = RANGE_160;	}	else if (enc == PG_WIN1250)	{		/*		 * Window CP1250 <range: 128 -- 255>		 */		ascii = "  ' \"    %S<STZZ `'\"\".--  s>stzz   L A  \"CS  -RZ  ,l'u .,as L\"lzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTBraaaalccceeeeiiddnnoooo/ruuuuyt ";		range = RANGE_128;	}	else	{		ereport(ERROR,				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),			   errmsg("encoding conversion from %s to ASCII not supported",					  pg_encoding_to_char(enc))));		return;					/* keep compiler quiet */	}	/*	 * Encode	 */	for (x = src; x < src_end; x++)	{		if (*x < 128)			*dest++ = *x;		else if (*x < range)			*dest++ = ' ';		/* bogus 128 to 'range' */		else			*dest++ = ascii[*x - range];	}}/* ---------- * encode text * * The text datum is overwritten in-place, therefore this coding method * cannot support conversions that change the string length! * ---------- */static text *encode_to_ascii(text *data, int enc){	pg_to_ascii((unsigned char *) VARDATA(data),		/* src */				(unsigned char *) (data) + VARSIZE(data),		/* src end */				(unsigned char *) VARDATA(data),		/* dest */				enc);			/* encoding */	return data;}/* ---------- * convert to ASCII - enc is set as 'name' arg. * ---------- */Datumto_ascii_encname(PG_FUNCTION_ARGS){	text	   *data = PG_GETARG_TEXT_P_COPY(0);	int			enc = pg_char_to_encoding(NameStr(*PG_GETARG_NAME(1)));	PG_RETURN_TEXT_P(encode_to_ascii(data, enc));}/* ---------- * convert to ASCII - enc is set as int4 * ---------- */Datumto_ascii_enc(PG_FUNCTION_ARGS){	text	   *data = PG_GETARG_TEXT_P_COPY(0);	int			enc = PG_GETARG_INT32(1);	PG_RETURN_TEXT_P(encode_to_ascii(data, enc));}/* ---------- * convert to ASCII - current enc is DatabaseEncoding * ---------- */Datumto_ascii_default(PG_FUNCTION_ARGS){	text	   *data = PG_GETARG_TEXT_P_COPY(0);	int			enc = GetDatabaseEncoding();	PG_RETURN_TEXT_P(encode_to_ascii(data, enc));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -