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

📄 varchar.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
📖 第 1 页 / 共 2 页
字号:
	int			i;	int			len;	len = VARSIZE(arg) - VARHDRSZ;	for (i = len - 1; i >= 0; i--)	{		if (s[i] != ' ')			break;	}	return i + 1;}int32bpcharlen(char *arg){#ifdef MULTIBYTE	unsigned char *s;	int			len,				l,				wl;#endif	if (!PointerIsValid(arg))		elog(ERROR, "Bad (null) char() external representation", NULL);#ifdef MULTIBYTE	l = bcTruelen(arg);	len = 0;	s = VARDATA(arg);	while (l > 0)	{		wl = pg_mblen(s);		l -= wl;		s += wl;		len++;	}	return (len);#else	return bcTruelen(arg);#endif}int32bpcharoctetlen(char *arg){	if (!PointerIsValid(arg))		elog(ERROR, "Bad (null) char() external representation", NULL);	return bcTruelen(arg);}boolbpchareq(char *arg1, char *arg2){	int			len1,				len2;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	if (len1 != len2)		return 0;	return strncmp(VARDATA(arg1), VARDATA(arg2), len1) == 0;}boolbpcharne(char *arg1, char *arg2){	int			len1,				len2;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	if (len1 != len2)		return 1;	return strncmp(VARDATA(arg1), VARDATA(arg2), len1) != 0;}boolbpcharlt(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (cmp == 0)		return len1 < len2;	else		return cmp < 0;}boolbpcharle(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (0 == cmp)		return (bool) (len1 <= len2 ? 1 : 0);	else		return (bool) (cmp <= 0);}boolbpchargt(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (cmp == 0)		return len1 > len2;	else		return cmp > 0;}boolbpcharge(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (0 == cmp)		return (bool) (len1 >= len2 ? 1 : 0);	else		return (bool) (cmp >= 0);}int32bpcharcmp(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	len1 = bcTruelen(arg1);	len2 = bcTruelen(arg2);	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if ((0 == cmp) && (len1 != len2))		return (int32) (len1 < len2 ? -1 : 1);	else		return cmp;}/***************************************************************************** *	Comparison Functions used for varchar *****************************************************************************/int32varcharlen(char *arg){#ifdef MULTIBYTE	unsigned char *s;	int			len,				l,				wl;#endif	if (!PointerIsValid(arg))		elog(ERROR, "Bad (null) varchar() external representation", NULL);#ifdef MULTIBYTE	len = 0;	s = VARDATA(arg);	l = VARSIZE(arg) - VARHDRSZ;	while (l > 0)	{		wl = pg_mblen(s);		l -= wl;		s += wl;		len++;	}	return (len);#else	return VARSIZE(arg) - VARHDRSZ;#endif}int32varcharoctetlen(char *arg){	if (!PointerIsValid(arg))		elog(ERROR, "Bad (null) varchar() external representation", NULL);	return VARSIZE(arg) - VARHDRSZ;}boolvarchareq(char *arg1, char *arg2){	int			len1,				len2;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	if (len1 != len2)		return 0;	return strncmp(VARDATA(arg1), VARDATA(arg2), len1) == 0;}boolvarcharne(char *arg1, char *arg2){	int			len1,				len2;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	if (len1 != len2)		return 1;	return strncmp(VARDATA(arg1), VARDATA(arg2), len1) != 0;}boolvarcharlt(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (cmp == 0)		return len1 < len2;	else		return cmp < 0;}boolvarcharle(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (0 == cmp)		return (bool) (len1 <= len2 ? 1 : 0);	else		return (bool) (cmp <= 0);}boolvarchargt(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (cmp == 0)		return len1 > len2;	else		return cmp > 0;}boolvarcharge(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	if (arg1 == NULL || arg2 == NULL)		return (bool) 0;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if (0 == cmp)		return (bool) (len1 >= len2 ? 1 : 0);	else		return (bool) (cmp >= 0);}int32varcharcmp(char *arg1, char *arg2){	int			len1,				len2;	int			cmp;	len1 = VARSIZE(arg1) - VARHDRSZ;	len2 = VARSIZE(arg2) - VARHDRSZ;	cmp = varstr_cmp(VARDATA(arg1), len1, VARDATA(arg2), len2);	if ((0 == cmp) && (len1 != len2))		return (int32) (len1 < len2 ? -1 : 1);	else		return (int32) (cmp);}/***************************************************************************** * Hash functions (modified from hashtext in access/hash/hashfunc.c) *****************************************************************************/uint32hashbpchar(struct varlena * key){	int			keylen;	char	   *keydata;	uint32		n;	int			loop;	keydata = VARDATA(key);	keylen = bcTruelen((char *) key);#define HASHC	n = *keydata++ + 65599 * n	n = 0;	if (keylen > 0)	{		loop = (keylen + 8 - 1) >> 3;		switch (keylen & (8 - 1))		{			case 0:				do				{				/* All fall throughs */					HASHC;			case 7:					HASHC;			case 6:					HASHC;			case 5:					HASHC;			case 4:					HASHC;			case 3:					HASHC;			case 2:					HASHC;			case 1:					HASHC;				} while (--loop);		}	}	return n;}uint32hashvarchar(struct varlena * key){	int			keylen;	char	   *keydata;	uint32		n;	int			loop;	keydata = VARDATA(key);	keylen = VARSIZE(key) - VARHDRSZ;#define HASHC	n = *keydata++ + 65599 * n	n = 0;	if (keylen > 0)	{		loop = (keylen + 8 - 1) >> 3;		switch (keylen & (8 - 1))		{			case 0:				do				{				/* All fall throughs */					HASHC;			case 7:					HASHC;			case 6:					HASHC;			case 5:					HASHC;			case 4:					HASHC;			case 3:					HASHC;			case 2:					HASHC;			case 1:					HASHC;				} while (--loop);		}	}	return n;}

⌨️ 快捷键说明

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