亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? like.c

?? PostgreSQL7.4.6 for Linux
?? C
字號:
/*------------------------------------------------------------------------- * * like.c *	  like expression handling code. * *	 NOTES *		A big hack of the regexp.c code!! Contributed by *		Keith Parks <emkxp01@mtcc.demon.co.uk> (7/95). * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION *	$Header: /cvsroot/pgsql/src/backend/utils/adt/like.c,v 1.56 2003/08/04 02:40:05 momjian Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include <ctype.h>#include "mb/pg_wchar.h"#include "utils/builtins.h"#define LIKE_TRUE						1#define LIKE_FALSE						0#define LIKE_ABORT						(-1)static int MatchText(unsigned char *t, int tlen,		  unsigned char *p, int plen);static int MatchTextIC(unsigned char *t, int tlen,			unsigned char *p, int plen);static int MatchBytea(unsigned char *t, int tlen,		   unsigned char *p, int plen);static text *do_like_escape(text *, text *);static int MBMatchText(unsigned char *t, int tlen,			unsigned char *p, int plen);static int MBMatchTextIC(unsigned char *t, int tlen,			  unsigned char *p, int plen);static text *MB_do_like_escape(text *, text *);/*-------------------- * Support routine for MatchText. Compares given multibyte streams * as wide characters. If they match, returns 1 otherwise returns 0. *-------------------- */static intwchareq(unsigned char *p1, unsigned char *p2){	int			l;	l = pg_mblen(p1);	if (pg_mblen(p2) != l)		return (0);	while (l--)	{		if (*p1++ != *p2++)			return (0);	}	return (1);}/*-------------------- * Support routine for MatchTextIC. Compares given multibyte streams * as wide characters ignoring case. * If they match, returns 1 otherwise returns 0. *-------------------- */#define CHARMAX 0x80static intiwchareq(unsigned char *p1, unsigned char *p2){	int			c1[2],				c2[2];	int			l;	/*	 * short cut. if *p1 and *p2 is lower than CHARMAX, then we could	 * assume they are ASCII	 */	if (*p1 < CHARMAX && *p2 < CHARMAX)		return (tolower(*p1) == tolower(*p2));	/*	 * if one of them is an ASCII while the other is not, then they must	 * be different characters	 */	else if (*p1 < CHARMAX || *p2 < CHARMAX)		return (0);	/*	 * ok, p1 and p2 are both > CHARMAX, then they must be multibyte	 * characters	 */	l = pg_mblen(p1);	(void) pg_mb2wchar_with_len(p1, (pg_wchar *) c1, l);	c1[0] = tolower(c1[0]);	l = pg_mblen(p2);	(void) pg_mb2wchar_with_len(p2, (pg_wchar *) c2, l);	c2[0] = tolower(c2[0]);	return (c1[0] == c2[0]);}#define CHAREQ(p1, p2) wchareq(p1, p2)#define ICHAREQ(p1, p2) iwchareq(p1, p2)#define NextChar(p, plen) \	do { int __l = pg_mblen(p); (p) +=__l; (plen) -=__l; } while (0)#define CopyAdvChar(dst, src, srclen) \	do { int __l = pg_mblen(src); \		 (srclen) -= __l; \		 while (__l-- > 0) \			 *(dst)++ = *(src)++; \	   } while (0)#define MatchText	MBMatchText#define MatchTextIC MBMatchTextIC#define do_like_escape	MB_do_like_escape#include "like_match.c"#undef CHAREQ#undef ICHAREQ#undef NextChar#undef CopyAdvChar#undef MatchText#undef MatchTextIC#undef do_like_escape#define CHAREQ(p1, p2) (*(p1) == *(p2))#define ICHAREQ(p1, p2) (tolower(*(p1)) == tolower(*(p2)))#define NextChar(p, plen) ((p)++, (plen)--)#define CopyAdvChar(dst, src, srclen) (*(dst)++ = *(src)++, (srclen)--)#define BYTEA_CHAREQ(p1, p2) (*(p1) == *(p2))#define BYTEA_NextChar(p, plen) ((p)++, (plen)--)#define BYTEA_CopyAdvChar(dst, src, srclen) (*(dst)++ = *(src)++, (srclen)--)#include "like_match.c"/* *	interface routines called by the function manager */Datumnamelike(PG_FUNCTION_ARGS){	Name		str = PG_GETARG_NAME(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = NameStr(*str);	slen = strlen(s);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchText(s, slen, p, plen) == LIKE_TRUE);	else		result = (MBMatchText(s, slen, p, plen) == LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumnamenlike(PG_FUNCTION_ARGS){	Name		str = PG_GETARG_NAME(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = NameStr(*str);	slen = strlen(s);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchText(s, slen, p, plen) != LIKE_TRUE);	else		result = (MBMatchText(s, slen, p, plen) != LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumtextlike(PG_FUNCTION_ARGS){	text	   *str = PG_GETARG_TEXT_P(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchText(s, slen, p, plen) == LIKE_TRUE);	else		result = (MBMatchText(s, slen, p, plen) == LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumtextnlike(PG_FUNCTION_ARGS){	text	   *str = PG_GETARG_TEXT_P(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchText(s, slen, p, plen) != LIKE_TRUE);	else		result = (MBMatchText(s, slen, p, plen) != LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumbytealike(PG_FUNCTION_ARGS){	bytea	   *str = PG_GETARG_BYTEA_P(0);	bytea	   *pat = PG_GETARG_BYTEA_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	result = (MatchBytea(s, slen, p, plen) == LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumbyteanlike(PG_FUNCTION_ARGS){	bytea	   *str = PG_GETARG_BYTEA_P(0);	bytea	   *pat = PG_GETARG_BYTEA_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	result = (MatchBytea(s, slen, p, plen) != LIKE_TRUE);	PG_RETURN_BOOL(result);}/* * Case-insensitive versions */Datumnameiclike(PG_FUNCTION_ARGS){	Name		str = PG_GETARG_NAME(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = NameStr(*str);	slen = strlen(s);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchTextIC(s, slen, p, plen) == LIKE_TRUE);	else		result = (MBMatchTextIC(s, slen, p, plen) == LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumnameicnlike(PG_FUNCTION_ARGS){	Name		str = PG_GETARG_NAME(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = NameStr(*str);	slen = strlen(s);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchTextIC(s, slen, p, plen) != LIKE_TRUE);	else		result = (MBMatchTextIC(s, slen, p, plen) != LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumtexticlike(PG_FUNCTION_ARGS){	text	   *str = PG_GETARG_TEXT_P(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchTextIC(s, slen, p, plen) == LIKE_TRUE);	else		result = (MBMatchTextIC(s, slen, p, plen) == LIKE_TRUE);	PG_RETURN_BOOL(result);}Datumtexticnlike(PG_FUNCTION_ARGS){	text	   *str = PG_GETARG_TEXT_P(0);	text	   *pat = PG_GETARG_TEXT_P(1);	bool		result;	unsigned char *s,			   *p;	int			slen,				plen;	s = VARDATA(str);	slen = (VARSIZE(str) - VARHDRSZ);	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	if (pg_database_encoding_max_length() == 1)		result = (MatchTextIC(s, slen, p, plen) != LIKE_TRUE);	else		result = (MBMatchTextIC(s, slen, p, plen) != LIKE_TRUE);	PG_RETURN_BOOL(result);}/* * like_escape() --- given a pattern and an ESCAPE string, * convert the pattern to use Postgres' standard backslash escape convention. */Datumlike_escape(PG_FUNCTION_ARGS){	text	   *pat = PG_GETARG_TEXT_P(0);	text	   *esc = PG_GETARG_TEXT_P(1);	text	   *result;	if (pg_database_encoding_max_length() == 1)		result = do_like_escape(pat, esc);	else		result = MB_do_like_escape(pat, esc);	PG_RETURN_TEXT_P(result);}/* * like_escape_bytea() --- given a pattern and an ESCAPE string, * convert the pattern to use Postgres' standard backslash escape convention. */Datumlike_escape_bytea(PG_FUNCTION_ARGS){	bytea	   *pat = PG_GETARG_BYTEA_P(0);	bytea	   *esc = PG_GETARG_BYTEA_P(1);	bytea	   *result;	unsigned char *p,			   *e,			   *r;	int			plen,				elen;	bool		afterescape;	p = VARDATA(pat);	plen = (VARSIZE(pat) - VARHDRSZ);	e = VARDATA(esc);	elen = (VARSIZE(esc) - VARHDRSZ);	/*	 * Worst-case pattern growth is 2x --- unlikely, but it's hardly worth	 * trying to calculate the size more accurately than that.	 */	result = (text *) palloc(plen * 2 + VARHDRSZ);	r = VARDATA(result);	if (elen == 0)	{		/*		 * No escape character is wanted.  Double any backslashes in the		 * pattern to make them act like ordinary characters.		 */		while (plen > 0)		{			if (*p == '\\')				*r++ = '\\';			BYTEA_CopyAdvChar(r, p, plen);		}	}	else	{		/*		 * The specified escape must be only a single character.		 */		BYTEA_NextChar(e, elen);		if (elen != 0)			ereport(ERROR,					(errcode(ERRCODE_INVALID_ESCAPE_SEQUENCE),					 errmsg("invalid escape string"),			  errhint("Escape string must be empty or one character.")));		e = VARDATA(esc);		/*		 * If specified escape is '\', just copy the pattern as-is.		 */		if (*e == '\\')		{			memcpy(result, pat, VARSIZE(pat));			PG_RETURN_BYTEA_P(result);		}		/*		 * Otherwise, convert occurrences of the specified escape		 * character to '\', and double occurrences of '\' --- unless they		 * immediately follow an escape character!		 */		afterescape = false;		while (plen > 0)		{			if (BYTEA_CHAREQ(p, e) && !afterescape)			{				*r++ = '\\';				BYTEA_NextChar(p, plen);				afterescape = true;			}			else if (*p == '\\')			{				*r++ = '\\';				if (!afterescape)					*r++ = '\\';				BYTEA_NextChar(p, plen);				afterescape = false;			}			else			{				BYTEA_CopyAdvChar(r, p, plen);				afterescape = false;			}		}	}	VARATT_SIZEP(result) = r - ((unsigned char *) result);	PG_RETURN_BYTEA_P(result);}/* * Same as above, but specifically for bytea (binary) datatype */static intMatchBytea(unsigned char *t, int tlen, unsigned char *p, int plen){	/* Fast path for match-everything pattern */	if ((plen == 1) && (*p == '%'))		return LIKE_TRUE;	while ((tlen > 0) && (plen > 0))	{		if (*p == '\\')		{			/* Next pattern char must match literally, whatever it is */			BYTEA_NextChar(p, plen);			if ((plen <= 0) || !BYTEA_CHAREQ(t, p))				return LIKE_FALSE;		}		else if (*p == '%')		{			/* %% is the same as % according to the SQL standard */			/* Advance past all %'s */			while ((plen > 0) && (*p == '%'))				BYTEA_NextChar(p, plen);			/* Trailing percent matches everything. */			if (plen <= 0)				return LIKE_TRUE;			/*			 * Otherwise, scan for a text position at which we can match			 * the rest of the pattern.			 */			while (tlen > 0)			{				/*				 * Optimization to prevent most recursion: don't recurse				 * unless first pattern char might match this text char.				 */				if (BYTEA_CHAREQ(t, p) || (*p == '\\') || (*p == '_'))				{					int			matched = MatchBytea(t, tlen, p, plen);					if (matched != LIKE_FALSE)						return matched; /* TRUE or ABORT */				}				BYTEA_NextChar(t, tlen);			}			/*			 * End of text with no match, so no point in trying later			 * places to start matching this pattern.			 */			return LIKE_ABORT;		}		else if ((*p != '_') && !BYTEA_CHAREQ(t, p))		{			/*			 * Not the single-character wildcard and no explicit match?			 * Then time to quit...			 */			return LIKE_FALSE;		}		BYTEA_NextChar(t, tlen);		BYTEA_NextChar(p, plen);	}	if (tlen > 0)		return LIKE_FALSE;		/* end of pattern, but not of text */	/* End of input string.  Do we have matching pattern remaining? */	while ((plen > 0) && (*p == '%'))	/* allow multiple %'s at end of										 * pattern */		BYTEA_NextChar(p, plen);	if (plen <= 0)		return LIKE_TRUE;	/*	 * End of text with no match, so no point in trying later places to	 * start matching this pattern.	 */	return LIKE_ABORT;}	/* MatchBytea() */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区人人喊爽| 韩国成人福利片在线播放| 91蜜桃在线观看| 欧美国产日韩精品免费观看| 国产成人自拍网| 国产精品午夜春色av| 成人黄色av电影| 亚洲精品伦理在线| 欧美在线观看一区二区| 亚洲成人资源在线| 日韩视频不卡中文| 国内精品自线一区二区三区视频| 欧美一级艳片视频免费观看| 久久国产精品99久久人人澡| 欧美精品一区二区三区高清aⅴ| 国产乱国产乱300精品| 中文字幕精品三区| 色婷婷av一区二区三区之一色屋| 亚洲成av人片| www欧美成人18+| 成人午夜免费视频| 亚洲精品精品亚洲| 欧美一区二视频| 国产激情精品久久久第一区二区| 国产精品久久福利| 欧美私模裸体表演在线观看| 秋霞电影网一区二区| 国产亚洲欧美日韩在线一区| 91九色最新地址| 欧美日韩五月天| 蜜臀精品一区二区三区在线观看| 久久久综合视频| 色综合天天综合在线视频| 午夜激情一区二区| 久久久精品tv| 欧美三级资源在线| 国产精品一区不卡| 夜夜亚洲天天久久| 久久综合色综合88| 日本久久电影网| 国产综合久久久久影院| 亚洲天堂成人在线观看| 欧美一级在线观看| 91香蕉视频污在线| 精品一二三四在线| 亚洲综合小说图片| 久久久国产综合精品女国产盗摄| 欧美在线免费观看视频| 盗摄精品av一区二区三区| 丝袜国产日韩另类美女| 中文字幕在线一区| 欧美大尺度电影在线| 日本韩国欧美三级| 成人中文字幕在线| 美日韩一区二区| 亚洲国产日韩在线一区模特| 久久精品免视看| 欧美精品乱人伦久久久久久| 91一区二区三区在线播放| 韩国中文字幕2020精品| 日韩国产欧美视频| 一区二区三区自拍| 亚洲欧洲在线观看av| 久久久久99精品国产片| 日韩欧美一级二级三级| 欧美色综合影院| 色狠狠桃花综合| 成人h精品动漫一区二区三区| 国产在线精品一区在线观看麻豆| 亚洲大型综合色站| 亚洲午夜av在线| 夜色激情一区二区| 亚洲色图欧洲色图| 国产精品久99| 国产精品久久午夜夜伦鲁鲁| 欧美国产激情一区二区三区蜜月| 欧美r级在线观看| 日韩一区二区三区免费观看| 9191精品国产综合久久久久久| 欧美在线你懂的| 欧美综合一区二区| 欧美亚洲一区二区三区四区| 欧美在线一区二区| 欧美日韩一级二级| 欧美日韩精品一区视频| 欧美日韩国产成人在线免费| 在线精品视频免费观看| 欧美午夜精品免费| 欧美人体做爰大胆视频| 欧美人牲a欧美精品| 8x福利精品第一导航| 亚洲3atv精品一区二区三区| 亚洲风情在线资源站| 丝袜亚洲另类欧美综合| 日韩二区三区在线观看| 日本特黄久久久高潮| 精品一区二区三区免费视频| 精品亚洲国内自在自线福利| 国产高清视频一区| www.综合网.com| 91成人看片片| 欧美一区二区三区免费观看视频| 91精品国产福利在线观看| 精品国产3级a| 国产精品看片你懂得| 亚洲自拍偷拍欧美| 日韩中文字幕亚洲一区二区va在线 | 日本欧美久久久久免费播放网| 香蕉影视欧美成人| 精品一区免费av| 99精品欧美一区| 欧美色综合影院| 精品欧美一区二区在线观看| 国产欧美一区二区精品性| 亚洲免费色视频| 奇米四色…亚洲| 不卡一区中文字幕| 欧美三级视频在线观看| 欧美精品一区二区三区蜜桃| 亚洲人一二三区| 免费在线看成人av| av中文字幕亚洲| 这里只有精品99re| 国产精品久久久久一区二区三区| 一区二区在线看| 国产一区二区三区综合| 91免费视频网址| 2023国产精华国产精品| 亚洲欧洲制服丝袜| 精品在线播放午夜| 91久久精品日日躁夜夜躁欧美| 日韩欧美成人激情| 亚洲黄色在线视频| 国产一区二区导航在线播放| 欧美日韩中文国产| 中文欧美字幕免费| 麻豆成人久久精品二区三区小说| 91亚洲精品乱码久久久久久蜜桃| 日韩精品一区二区三区蜜臀| 一区二区三区中文字幕| 狠狠色丁香婷婷综合久久片| 欧美午夜电影在线播放| 欧美国产激情二区三区| 精品在线播放免费| 欧美人动与zoxxxx乱| 综合色天天鬼久久鬼色| 国产精品亚洲午夜一区二区三区 | 精品人在线二区三区| 亚洲精品高清在线| 成人一区二区三区在线观看| 日韩一区二区三区高清免费看看| 亚洲你懂的在线视频| 大白屁股一区二区视频| 精品国产一区二区国模嫣然| 首页国产欧美久久| 在线国产电影不卡| 成人激情综合网站| 久久精品一区八戒影视| 精品影视av免费| 欧美一级日韩不卡播放免费| 亚洲国产欧美另类丝袜| 日本韩国一区二区三区| 中文字幕亚洲综合久久菠萝蜜| 国产麻豆午夜三级精品| 欧美成人免费网站| 日韩精品午夜视频| 欧美日韩夫妻久久| 亚洲sss视频在线视频| 欧美日韩视频在线一区二区| 亚洲一区二区三区激情| 日本精品一区二区三区高清| 亚洲日本va午夜在线电影| 成人国产精品视频| 国产精品福利一区二区三区| 懂色av一区二区在线播放| 国产视频一区二区在线观看| 国产福利一区二区三区视频| 国产欧美一区视频| 成人免费视频网站在线观看| 中国色在线观看另类| 成人激情免费电影网址| 18成人在线视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲男人的天堂网| 色哟哟精品一区| 午夜在线电影亚洲一区| 91精品国产综合久久福利软件 | 欧美丰满少妇xxxbbb| 亚洲国产欧美在线人成| 欧美日韩在线三区| 日本成人在线电影网| 久久综合国产精品| 国产在线精品免费| 中文乱码免费一区二区| 色综合av在线| 亚洲一区二区在线免费观看视频| 欧美日韩大陆在线| 九九九精品视频| 国产精品水嫩水嫩| 欧美色男人天堂|