📄 varchar.c
字号:
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 + -