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

📄 formatting.c

📁 postgresql8.3.4源码,开源数据库
💻 C
📖 第 1 页 / 共 5 页
字号:
				str_toupper(inout);			}			return strlen(p_inout);		case DCH_Mon:			INVALID_FOR_INTERVAL;			if (!tm->tm_mon)				return -1;			if (S_TM(suf))				strcpy(inout, localize_month(tm->tm_mon - 1));			else				strcpy(inout, months[tm->tm_mon - 1]);			return strlen(p_inout);		case DCH_mon:			INVALID_FOR_INTERVAL;			if (!tm->tm_mon)				return -1;			if (S_TM(suf))			{				strcpy(workbuff, localize_month(tm->tm_mon - 1));				strcpy(inout, localized_str_tolower(workbuff));			}			else			{				strcpy(inout, months[tm->tm_mon - 1]);				*inout = pg_tolower((unsigned char) *inout);			}			return strlen(p_inout);		case DCH_MM:			if (is_to_char)			{				sprintf(inout, "%0*d", S_FM(suf) ? 0 : 2, tm->tm_mon);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->mm);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%02d", &tmfc->mm);					return strspace_len(inout) + 2 + SKIP_THth(suf);				}			}			break;		case DCH_DAY:			INVALID_FOR_INTERVAL;			if (S_TM(suf))			{				strcpy(workbuff, localize_day_full(tm->tm_wday));				sprintf(inout, "%*s", 0, localized_str_toupper(workbuff));			}			else			{				strcpy(workbuff, days[tm->tm_wday]);				sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(workbuff));			}			return strlen(p_inout);		case DCH_Day:			INVALID_FOR_INTERVAL;			if (S_TM(suf))				sprintf(inout, "%*s", 0, localize_day_full(tm->tm_wday));			else				sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);			return strlen(p_inout);		case DCH_day:			INVALID_FOR_INTERVAL;			if (S_TM(suf))			{				strcpy(workbuff, localize_day_full(tm->tm_wday));				sprintf(inout, "%*s", 0, localized_str_tolower(workbuff));			}			else			{				sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, days[tm->tm_wday]);				*inout = pg_tolower((unsigned char) *inout);			}			return strlen(p_inout);		case DCH_DY:			INVALID_FOR_INTERVAL;			if (S_TM(suf))			{				strcpy(workbuff, localize_day(tm->tm_wday));				strcpy(inout, localized_str_toupper(workbuff));			}			else			{				strcpy(inout, days_short[tm->tm_wday]);				str_toupper(inout);			}			return strlen(p_inout);		case DCH_Dy:			INVALID_FOR_INTERVAL;			if (S_TM(suf))				strcpy(inout, localize_day(tm->tm_wday));			else				strcpy(inout, days_short[tm->tm_wday]);			return strlen(p_inout);		case DCH_dy:			INVALID_FOR_INTERVAL;			if (S_TM(suf))			{				strcpy(workbuff, localize_day(tm->tm_wday));				strcpy(inout, localized_str_tolower(workbuff));			}			else			{				strcpy(inout, days_short[tm->tm_wday]);				*inout = pg_tolower((unsigned char) *inout);			}			return strlen(p_inout);		case DCH_DDD:		case DCH_IDDD:			if (is_to_char)			{				sprintf(inout, "%0*d", S_FM(suf) ? 0 : 3,						(arg == DCH_DDD) ?						tm->tm_yday :					  date2isoyearday(tm->tm_year, tm->tm_mon, tm->tm_mday));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->ddd);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%03d", &tmfc->ddd);					return strspace_len(inout) + 3 + SKIP_THth(suf);				}			}			break;		case DCH_DD:			if (is_to_char)			{				sprintf(inout, "%0*d", S_FM(suf) ? 0 : 2, tm->tm_mday);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->dd);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%02d", &tmfc->dd);					return strspace_len(inout) + 2 + SKIP_THth(suf);				}			}			break;		case DCH_D:		case DCH_ID:			INVALID_FOR_INTERVAL;			if (is_to_char)			{				if (arg == DCH_D)					sprintf(inout, "%d", tm->tm_wday + 1);				else					sprintf(inout, "%d", (tm->tm_wday == 0) ? 7 : tm->tm_wday);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				sscanf(inout, "%1d", &tmfc->d);				if (arg == DCH_D)					tmfc->d--;				return strspace_len(inout) + 1 + SKIP_THth(suf);			}			break;		case DCH_WW:			if (is_to_char)			{				sprintf(inout, "%0*d", S_FM(suf) ? 0 : 2,						(tm->tm_yday - 1) / 7 + 1);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->ww);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%02d", &tmfc->ww);					return strspace_len(inout) + 2 + SKIP_THth(suf);				}			}			break;		case DCH_IW:			if (is_to_char)			{				sprintf(inout, "%0*d", S_FM(suf) ? 0 : 2,						date2isoweek(tm->tm_year, tm->tm_mon, tm->tm_mday));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->iw);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%02d", &tmfc->iw);					return strspace_len(inout) + 2 + SKIP_THth(suf);				}			}			break;		case DCH_Q:			if (is_to_char)			{				if (!tm->tm_mon)					return -1;				sprintf(inout, "%d", (tm->tm_mon - 1) / 3 + 1);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				sscanf(inout, "%1d", &tmfc->q);				return strspace_len(inout) + 1 + SKIP_THth(suf);			}			break;		case DCH_CC:			if (is_to_char)			{				if (is_interval)	/* straight calculation */					i = tm->tm_year / 100;				else	/* century 21 starts in 2001 */					i = (tm->tm_year - 1) / 100 + 1;				if (i <= 99 && i >= -99)					sprintf(inout, "%0*d", S_FM(suf) ? 0 : 2, i);				else					sprintf(inout, "%d", i);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", &tmfc->cc);					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%02d", &tmfc->cc);					return strspace_len(inout) + 2 + SKIP_THth(suf);				}			}			break;		case DCH_Y_YYY:			if (is_to_char)			{				i = ADJUST_YEAR(tm->tm_year, is_interval) / 1000;				sprintf(inout, "%d,%03d", i, ADJUST_YEAR(tm->tm_year, is_interval) - (i * 1000));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				int			cc;				sscanf(inout, "%d,%03d", &cc, &tmfc->year);				tmfc->year += (cc * 1000);				tmfc->yysz = 4;				return strdigits_len(inout) + 4 + SKIP_THth(suf);			}			break;		case DCH_YYYY:		case DCH_IYYY:			if (is_to_char)			{				if (tm->tm_year <= 9999 && tm->tm_year >= -9998)					sprintf(inout, "%0*d",							S_FM(suf) ? 0 : 4,							arg == DCH_YYYY ?							ADJUST_YEAR(tm->tm_year, is_interval) :							ADJUST_YEAR(date2isoyear(													 tm->tm_year,													 tm->tm_mon,												 tm->tm_mday), is_interval));				else					sprintf(inout, "%d",							arg == DCH_YYYY ?							ADJUST_YEAR(tm->tm_year, is_interval) :							ADJUST_YEAR(date2isoyear(													 tm->tm_year,													 tm->tm_mon,												 tm->tm_mday), is_interval));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				int		   *field;				field = (arg == DCH_YYYY) ? &tmfc->year : &tmfc->iyear;				if (S_FM(suf) || is_next_separator(node))				{					sscanf(inout, "%d", field);					tmfc->yysz = 4;					return strdigits_len(inout) + SKIP_THth(suf);				}				else				{					sscanf(inout, "%04d", field);					tmfc->yysz = 4;					return strspace_len(inout) + 4 + SKIP_THth(suf);				}			}			break;		case DCH_YYY:		case DCH_IYY:			if (is_to_char)			{				snprintf(buff, sizeof(buff), "%03d",						 arg == DCH_YYY ?						 ADJUST_YEAR(tm->tm_year, is_interval) :						 ADJUST_YEAR(date2isoyear(tm->tm_year,												  tm->tm_mon, tm->tm_mday),									 is_interval));				i = strlen(buff);				strcpy(inout, buff + (i - 3));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				int		   *field;				field = (arg == DCH_YYY) ? &tmfc->year : &tmfc->iyear;				sscanf(inout, "%03d", field);				/*				 * 3-digit year: '100' ... '999' = 1100 ... 1999 '000' ...				 * '099' = 2000 ... 2099				 */				if (*field >= 100)					*field += 1000;				else					*field += 2000;				tmfc->yysz = 3;				return strspace_len(inout) + 3 + SKIP_THth(suf);			}			break;		case DCH_YY:		case DCH_IY:			if (is_to_char)			{				snprintf(buff, sizeof(buff), "%02d",						 arg == DCH_YY ?						 ADJUST_YEAR(tm->tm_year, is_interval) :						 ADJUST_YEAR(date2isoyear(tm->tm_year,												  tm->tm_mon, tm->tm_mday),									 is_interval));				i = strlen(buff);				strcpy(inout, buff + (i - 2));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				int		   *field;				field = (arg == DCH_YY) ? &tmfc->year : &tmfc->iyear;				sscanf(inout, "%02d", field);				/*				 * 2-digit year: '00' ... '69'	= 2000 ... 2069 '70' ... '99'				 * = 1970 ... 1999				 */				if (*field < 70)					*field += 2000;				else					*field += 1900;				tmfc->yysz = 2;				return strspace_len(inout) + 2 + SKIP_THth(suf);			}			break;		case DCH_Y:		case DCH_I:			if (is_to_char)			{				snprintf(buff, sizeof(buff), "%1d",						 arg == DCH_Y ?						 ADJUST_YEAR(tm->tm_year, is_interval) :						 ADJUST_YEAR(date2isoyear(tm->tm_year,												  tm->tm_mon, tm->tm_mday),									 is_interval));				i = strlen(buff);				strcpy(inout, buff + (i - 1));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				int		   *field;				field = (arg == DCH_Y) ? &tmfc->year : &tmfc->iyear;				sscanf(inout, "%1d", field);				/*				 * 1-digit year: always +2000				 */				*field += 2000;				tmfc->yysz = 1;				return strspace_len(inout) + 1 + SKIP_THth(suf);			}			break;		case DCH_RM:			if (is_to_char)			{				if (!tm->tm_mon)					return -1;				sprintf(inout, "%*s", S_FM(suf) ? 0 : -4,						rm_months_upper[12 - tm->tm_mon]);				return strlen(p_inout);			}			else			{				tmfc->mm = 12 - seq_search(inout, rm_months_upper, ALL_UPPER, FULL_SIZ, &len);				CHECK_SEQ_SEARCH(len, "RM");				return len;			}			break;		case DCH_rm:			if (is_to_char)			{				if (!tm->tm_mon)					return -1;				sprintf(inout, "%*s", S_FM(suf) ? 0 : -4,						rm_months_lower[12 - tm->tm_mon]);				return strlen(p_inout);			}			else			{				tmfc->mm = 12 - seq_search(inout, rm_months_lower, ALL_LOWER, FULL_SIZ, &len);				CHECK_SEQ_SEARCH(len, "rm");				return len;			}			break;		case DCH_W:			if (is_to_char)			{				sprintf(inout, "%d", (tm->tm_mday - 1) / 7 + 1);				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				sscanf(inout, "%1d", &tmfc->w);				return strspace_len(inout) + 1 + SKIP_THth(suf);			}			break;		case DCH_J:			if (is_to_char)			{				sprintf(inout, "%d", date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));				if (S_THth(suf))					str_numth(p_inout, inout, S_TH_TYPE(suf));				return strlen(p_inout);			}			else			{				sscanf(inout, "%d", &tmfc->j);				return strdigits_len(inout) + SKIP_THth(suf);			}			break;	}	return -1;}static DCHCacheEntry *DCH_cache_getnew(char *str){	DCHCacheEntry *ent = NULL;	/* counter overload check  - paranoia? */	if (DCHCounter + DCH_CACHE_FIELDS >= MAX_INT32)	{		DCHCounter = 0;		for (ent = DCHCache; ent <= (DCHCache + DCH_CACHE_FIELDS); ent++)			ent->age = (++DCHCounter);	}	/*	 * Cache is full - needs remove any older entry	 */	if (n_DCHCache > DCH_CACHE_FIELDS)	{		DCHCacheEntry *old = DCHCache + 0;#ifdef DEBUG_TO_FROM_CHAR		elog(DEBUG_elog_output, "cache is full (%d)", n_DCHCache);#endif		for (ent = DCHCache; ent <= (DCHCache + DCH_CACHE_FIELDS); ent++)		{			if (ent->age < old->age)				old = ent;		}#ifdef DEBUG_TO_FROM_CHAR		elog(DEBUG_elog_output, "OLD: '%s' AGE: %d", old->str, old->age);#endif		StrNCpy(old->str, str, DCH_CACHE_SIZE + 1);		/* old->format fill parser */		old->age = (++DCHCounter);		return old;	}	else	{#ifdef DEBUG_TO_FROM_CHAR		elog(DEBUG_elog_output, "NEW (%d)", n_DCHCache);#endif		ent = DCHCache + n_DCHCache;		StrNCpy(ent->str, str, DCH_CACHE_SIZE + 1);		/* ent->format fill parser */		ent->age = (++DCHCounter);		++n_DCHCache;		return ent;	}	return NULL;				/* never */}static DCHCacheEntry *DCH_cache_search(char *str){	int			i = 0;	DCHCacheEntry *ent;	/* counter overload check  - paranoia? */	if (DCHCounter + DCH_CACHE_FIELDS >= 

⌨️ 快捷键说明

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