📄 pgtypes.c
字号:
else return maxsize; } /* Size is unknown -- handle according to parameter */ if (QR_get_atttypmod(result, col) > -1) return QR_get_atttypmod(result, col); if (type == PG_TYPE_BPCHAR || handle_unknown_size_as == UNKNOWNS_AS_LONGEST) { p = QR_get_display_size(result, col); mylog("getCharPrecision: LONGEST: p = %d\n", p); } if (p < 0 && handle_unknown_size_as == UNKNOWNS_AS_MAX) return maxsize; else return p;}/* For PG_TYPE_VARCHAR, PG_TYPE_BPCHAR, SQLColumns will override this length with the atttypmod length from pg_attribute . If col >= 0, then will attempt to get the info from the result set. This is used for functions SQLDescribeCol and SQLColAttributes.*/Int4 pgtype_precision(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_as){ switch(type) { case PG_TYPE_CHAR: return 1; case PG_TYPE_CHAR2: return 2; case PG_TYPE_CHAR4: return 4; case PG_TYPE_CHAR8: return 8; case PG_TYPE_CHAR16: return 16; case PG_TYPE_NAME: return NAME_FIELD_SIZE; case PG_TYPE_INT2: return 5; case PG_TYPE_OID: case PG_TYPE_XID: case PG_TYPE_INT4: return 10; case PG_TYPE_FLOAT4: case PG_TYPE_MONEY: return 7; case PG_TYPE_FLOAT8: return 15; case PG_TYPE_DATE: return 10; case PG_TYPE_TIME: return 8; case PG_TYPE_ABSTIME: case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: return 19; case PG_TYPE_BOOL: return 1; case PG_TYPE_LO: return SQL_NO_TOTAL; default: if (type == stmt->hdbc->lobj_type) /* hack until permanent type is available */ return SQL_NO_TOTAL; /* Handle Character types and unknown types */ return getCharPrecision(stmt, type, col, handle_unknown_size_as); }}Int4 pgtype_display_size(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_as){ switch(type) { case PG_TYPE_INT2: return 6; case PG_TYPE_OID: case PG_TYPE_XID: return 10; case PG_TYPE_INT4: return 11; case PG_TYPE_MONEY: return 15; /* ($9,999,999.99) */ case PG_TYPE_FLOAT4: return 13; case PG_TYPE_FLOAT8: return 22; /* Character types use regular precision */ default: return pgtype_precision(stmt, type, col, handle_unknown_size_as); }}/* For PG_TYPE_VARCHAR, PG_TYPE_BPCHAR, SQLColumns will override this length with the atttypmod length from pg_attribute */Int4 pgtype_length(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_as){ 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_FLOAT4: case PG_TYPE_MONEY: return 4; case PG_TYPE_FLOAT8: return 8; case PG_TYPE_DATE: case PG_TYPE_TIME: return 6; case PG_TYPE_ABSTIME: case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: return 16; /* Character types use the default precision */ default: return pgtype_precision(stmt, type, col, handle_unknown_size_as); }}Int2 pgtype_scale(StatementClass *stmt, Int4 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_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_DATETIME: case PG_TYPE_TIMESTAMP: return 0; default: return -1; }}Int2 pgtype_radix(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_INT2: case PG_TYPE_OID: case PG_TYPE_INT4: case PG_TYPE_FLOAT4: case PG_TYPE_MONEY: case PG_TYPE_FLOAT8: return 10; default: return -1; }}Int2 pgtype_nullable(StatementClass *stmt, Int4 type){ return SQL_NULLABLE; /* everything should be nullable */}Int2 pgtype_auto_increment(StatementClass *stmt, Int4 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_DATE: case PG_TYPE_TIME: case PG_TYPE_ABSTIME: case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: return FALSE; default: return -1; } }Int2 pgtype_case_sensitive(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_CHAR: case PG_TYPE_CHAR2: case PG_TYPE_CHAR4: case PG_TYPE_CHAR8: case PG_TYPE_CHAR16: case PG_TYPE_VARCHAR: case PG_TYPE_BPCHAR: case PG_TYPE_TEXT: case PG_TYPE_NAME: return TRUE; default: return FALSE; }}Int2 pgtype_money(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_MONEY: return TRUE; default: return FALSE; } }Int2 pgtype_searchable(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_CHAR: case PG_TYPE_CHAR2: case PG_TYPE_CHAR4: case PG_TYPE_CHAR8: case PG_TYPE_CHAR16: case PG_TYPE_VARCHAR: case PG_TYPE_BPCHAR: case PG_TYPE_TEXT: case PG_TYPE_NAME: return SQL_SEARCHABLE; default: return SQL_ALL_EXCEPT_LIKE; } }Int2 pgtype_unsigned(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_OID: case PG_TYPE_XID: return TRUE; case PG_TYPE_INT2: case PG_TYPE_INT4: case PG_TYPE_FLOAT4: case PG_TYPE_FLOAT8: case PG_TYPE_MONEY: return FALSE; default: return -1; }}char *pgtype_literal_prefix(StatementClass *stmt, Int4 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_FLOAT8: case PG_TYPE_MONEY: return NULL; default: return "'"; }}char *pgtype_literal_suffix(StatementClass *stmt, Int4 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_FLOAT8: case PG_TYPE_MONEY: return NULL; default: return "'"; }}char *pgtype_create_params(StatementClass *stmt, Int4 type){ switch(type) { case PG_TYPE_CHAR: case PG_TYPE_VARCHAR: return "max. length"; default: return NULL; }}Int2 sqltype_to_default_ctype(Int2 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: case SQL_BIGINT: return SQL_C_CHAR; 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; default: /* should never happen */ return SQL_C_CHAR; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -