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

📄 pgtypes.c

📁 postgresql-odbc,跨平台应用
💻 C
📖 第 1 页 / 共 3 页
字号:
	switch (type)	{		case PG_TYPE_INT2:			return 2;		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:			return 4;		case PG_TYPE_INT8:			return 20;			/* signed: 19 digits + sign */		case PG_TYPE_NUMERIC:			return getNumericColumnSize(stmt, type, col) + 2;		case PG_TYPE_FLOAT4:		case PG_TYPE_MONEY:			return 4;		case PG_TYPE_FLOAT8:			return 8;		case PG_TYPE_DATE:		case PG_TYPE_TIME:		case PG_TYPE_ABSTIME:		case PG_TYPE_DATETIME:		case PG_TYPE_TIMESTAMP_NO_TMZONE:		case PG_TYPE_TIMESTAMP:		case PG_TYPE_VARCHAR:		case PG_TYPE_BPCHAR:			return pgtype_column_size(stmt, type, col, handle_unknown_size_as);		default:			return pgtype_column_size(stmt, type, col, handle_unknown_size_as);	}}/* *	Transfer octet length. */Int4pgtype_transfer_octet_length(StatementClass *stmt, OID type, int col, int handle_unknown_size_as){	ConnectionClass	*conn = SC_get_conn(stmt);	int	coef = 1;	Int4	prec = pgtype_column_size(stmt, type, col, handle_unknown_size_as), maxvarc;	switch (type)	{		case PG_TYPE_VARCHAR:		case PG_TYPE_BPCHAR:		case PG_TYPE_TEXT:			if (SQL_NO_TOTAL == prec)				return prec;#ifdef	UNICODE_SUPPORT			if (CC_is_in_unicode_driver(conn))				return prec * WCLEN;#endif /* UNICODE_SUPPORT */			/* after 7.2 */			if (PG_VERSION_GE(conn, 7.2))				coef =conn->mb_maxbyte_per_char;			if (coef < 2 && (conn->connInfo).lf_conversion)				/* CR -> CR/LF */				coef = 2;			if (coef == 1)				return prec;			maxvarc = conn->connInfo.drivers.max_varchar_size;			if (prec <= maxvarc && prec * coef > maxvarc)				return maxvarc;			return coef * prec;		case PG_TYPE_BYTEA:			return prec;		default:			if (type == conn->lobj_type)				return prec;	}	return -1;}/* *	corrsponds to "min_scale" in ODBC 2.x. */Int2pgtype_min_decimal_digits(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:		case PG_TYPE_BOOL:		case PG_TYPE_ABSTIME:		case PG_TYPE_TIMESTAMP:		case PG_TYPE_DATETIME:		case PG_TYPE_TIMESTAMP_NO_TMZONE:		case PG_TYPE_NUMERIC:			return 0;		default:			return -1;	}}/* *	corrsponds to "max_scale" in ODBC 2.x. */Int2pgtype_max_decimal_digits(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:		case PG_TYPE_BOOL:		case PG_TYPE_ABSTIME:		case PG_TYPE_TIMESTAMP:			return 0;		case PG_TYPE_DATETIME:		case PG_TYPE_TIMESTAMP_NO_TMZONE:			return 38;		case PG_TYPE_NUMERIC:			return getNumericDecimalDigits(stmt, type, -1);		default:			return -1;	}}/* *	corrsponds to "scale" in ODBC 2.x. */Int2pgtype_decimal_digits(StatementClass *stmt, OID type, int col){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:		case PG_TYPE_BOOL:			/*			 * Number of digits to the right of the decimal point in			 * "yyyy-mm=dd hh:mm:ss[.f...]"			 */		case PG_TYPE_ABSTIME:		case PG_TYPE_TIMESTAMP:			return 0;		case PG_TYPE_DATETIME:		case PG_TYPE_TIMESTAMP_NO_TMZONE:			/* return 0; */			return getTimestampDecimalDigits(stmt, type, col);		case PG_TYPE_NUMERIC:			return getNumericDecimalDigits(stmt, type, col);		default:			return -1;	}}/* *	"scale" in ODBC 3.x. */Int2pgtype_scale(StatementClass *stmt, OID type, int col){	switch (type)	{		case PG_TYPE_NUMERIC:			return getNumericDecimalDigits(stmt, type, col);	}	return -1;}Int2pgtype_radix(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_XID:		case PG_TYPE_OID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_NUMERIC:		case PG_TYPE_FLOAT4:		case PG_TYPE_MONEY:		case PG_TYPE_FLOAT8:			return 10;		default:			return -1;	}}Int2pgtype_nullable(StatementClass *stmt, OID type){	return SQL_NULLABLE;		/* everything should be nullable */}Int2pgtype_auto_increment(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_FLOAT4:		case PG_TYPE_MONEY:		case PG_TYPE_BOOL:		case PG_TYPE_FLOAT8:		case PG_TYPE_INT8:		case PG_TYPE_NUMERIC:		case PG_TYPE_DATE:		case PG_TYPE_TIME_WITH_TMZONE:		case PG_TYPE_TIME:		case PG_TYPE_ABSTIME:		case PG_TYPE_DATETIME:		case PG_TYPE_TIMESTAMP_NO_TMZONE:		case PG_TYPE_TIMESTAMP:			return FALSE;		default:			return -1;	}}Int2pgtype_case_sensitive(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_CHAR:		case PG_TYPE_CHAR2:		case PG_TYPE_CHAR4:		case PG_TYPE_CHAR8:		case PG_TYPE_VARCHAR:		case PG_TYPE_BPCHAR:		case PG_TYPE_TEXT:		case PG_TYPE_NAME:			return TRUE;		default:			return FALSE;	}}Int2pgtype_money(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_MONEY:			return TRUE;		default:			return FALSE;	}}Int2pgtype_searchable(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_CHAR:		case PG_TYPE_CHAR2:		case PG_TYPE_CHAR4:		case PG_TYPE_CHAR8:		case PG_TYPE_VARCHAR:		case PG_TYPE_BPCHAR:		case PG_TYPE_TEXT:		case PG_TYPE_NAME:			return SQL_SEARCHABLE;		default:			if (stmt && type == SC_get_conn(stmt)->lobj_type)				return SQL_UNSEARCHABLE;			return SQL_ALL_EXCEPT_LIKE;	}}Int2pgtype_unsigned(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_OID:		case PG_TYPE_XID:			return TRUE;		case PG_TYPE_INT2:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_NUMERIC:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:			return FALSE;		default:			return -1;	}}char *pgtype_literal_prefix(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_NUMERIC:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:			return NULL;		default:			return "'";	}}char *pgtype_literal_suffix(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_INT2:		case PG_TYPE_OID:		case PG_TYPE_XID:		case PG_TYPE_INT4:		case PG_TYPE_INT8:		case PG_TYPE_NUMERIC:		case PG_TYPE_FLOAT4:		case PG_TYPE_FLOAT8:		case PG_TYPE_MONEY:			return NULL;		default:			return "'";	}}char *pgtype_create_params(StatementClass *stmt, OID type){	switch (type)	{		case PG_TYPE_BPCHAR:		case PG_TYPE_VARCHAR:			return "max. length";		case PG_TYPE_NUMERIC:			return "precision, scale";		default:			return NULL;	}}SQLSMALLINTsqltype_to_default_ctype(const ConnectionClass *conn, SQLSMALLINT sqltype){	/*	 * from the table on page 623 of ODBC 2.0 Programmer's Reference	 * (Appendix D)	 */	switch (sqltype)	{		case SQL_CHAR:		case SQL_VARCHAR:		case SQL_LONGVARCHAR:		case SQL_DECIMAL:		case SQL_NUMERIC:#if (ODBCVER < 0x0300)		case SQL_BIGINT:			return SQL_C_CHAR;#else			return SQL_C_CHAR;		case SQL_BIGINT:			return ALLOWED_C_BIGINT;#endif#ifdef	UNICODE_SUPPORT		case SQL_WCHAR:		case SQL_WVARCHAR:		case SQL_WLONGVARCHAR:			if (!ALLOW_WCHAR(conn))				return SQL_C_CHAR;			return SQL_C_WCHAR;#endif /* UNICODE_SUPPORT */		case SQL_BIT:			return SQL_C_BIT;		case SQL_TINYINT:			return SQL_C_STINYINT;		case SQL_SMALLINT:			return SQL_C_SSHORT;		case SQL_INTEGER:			return SQL_C_SLONG;		case SQL_REAL:			return SQL_C_FLOAT;		case SQL_FLOAT:		case SQL_DOUBLE:			return SQL_C_DOUBLE;		case SQL_BINARY:		case SQL_VARBINARY:		case SQL_LONGVARBINARY:			return SQL_C_BINARY;		case SQL_DATE:			return SQL_C_DATE;		case SQL_TIME:			return SQL_C_TIME;		case SQL_TIMESTAMP:			return SQL_C_TIMESTAMP;#if (ODBCVER >= 0x0300)		case SQL_TYPE_DATE:			return SQL_C_TYPE_DATE;		case SQL_TYPE_TIME:			return SQL_C_TYPE_TIME;		case SQL_TYPE_TIMESTAMP:			return SQL_C_TYPE_TIMESTAMP;#endif /* ODBCVER */		default:			/* should never happen */			return SQL_C_CHAR;	}}Int4ctype_length(SQLSMALLINT ctype){	switch (ctype)	{		case SQL_C_SSHORT:		case SQL_C_SHORT:			return sizeof(SWORD);		case SQL_C_USHORT:			return sizeof(UWORD);		case SQL_C_SLONG:		case SQL_C_LONG:			return sizeof(SDWORD);		case SQL_C_ULONG:			return sizeof(UDWORD);		case SQL_C_FLOAT:			return sizeof(SFLOAT);		case SQL_C_DOUBLE:			return sizeof(SDOUBLE);		case SQL_C_BIT:			return sizeof(UCHAR);		case SQL_C_STINYINT:		case SQL_C_TINYINT:			return sizeof(SCHAR);		case SQL_C_UTINYINT:			return sizeof(UCHAR);		case SQL_C_DATE:#if (ODBCVER >= 0x0300)		case SQL_C_TYPE_DATE:#endif /* ODBCVER */			return sizeof(DATE_STRUCT);		case SQL_C_TIME:#if (ODBCVER >= 0x0300)		case SQL_C_TYPE_TIME:#endif /* ODBCVER */			return sizeof(TIME_STRUCT);		case SQL_C_TIMESTAMP:#if (ODBCVER >= 0x0300)		case SQL_C_TYPE_TIMESTAMP:#endif /* ODBCVER */			return sizeof(TIMESTAMP_STRUCT);		case SQL_C_BINARY:		case SQL_C_CHAR:#ifdef	UNICODE_SUPPORT		case SQL_C_WCHAR:#endif /* UNICODE_SUPPORT */			return 0;		default:				/* should never happen */			return 0;	}}

⌨️ 快捷键说明

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