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