sqlgettypeinfo.c
来自「这个是内存数据库的客户端」· C语言 代码 · 共 1,091 行 · 第 1/3 页
C
1,091 行
SQL_INTERVAL, /* sql_data_type */ SQL_CODE_DAY_TO_MINUTE,/* sql_datetime_sub */ -1, /* num_prec_radix */ 5, /* interval_precision */ NULL /* tuple */ }, { "interval day to second",/* type_name */ SQL_INTERVAL_DAY_TO_SECOND,/* data_type */ 14, /* column_size */ "'", /* literal_prefix */ "'", /* literal_suffix */ "precision", /* create_params */ SQL_NULLABLE, /* nullable */ SQL_FALSE, /* case_sensitive */ SQL_PRED_BASIC, /* searchable */ -1, /* unsigned_attribute */ SQL_FALSE, /* fixed_prec_scale */ -1, /* auto_unique_value */ NULL, /* local_type_name */ 0, /* minimum_scale */ 0, /* maximum_scale */ SQL_INTERVAL, /* sql_data_type */ SQL_CODE_DAY_TO_SECOND,/* sql_datetime_sub */ -1, /* num_prec_radix */ 5, /* interval_precision */ NULL /* tuple */ }, { "interval hour to minute",/* type_name */ SQL_INTERVAL_HOUR_TO_MINUTE,/* data_type */ 9, /* column_size */ "'", /* literal_prefix */ "'", /* literal_suffix */ "precision", /* create_params */ SQL_NULLABLE, /* nullable */ SQL_FALSE, /* case_sensitive */ SQL_PRED_BASIC, /* searchable */ -1, /* unsigned_attribute */ SQL_FALSE, /* fixed_prec_scale */ -1, /* auto_unique_value */ NULL, /* local_type_name */ 0, /* minimum_scale */ 0, /* maximum_scale */ SQL_INTERVAL, /* sql_data_type */ SQL_CODE_HOUR_TO_MINUTE,/* sql_datetime_sub */ -1, /* num_prec_radix */ 6, /* interval_precision */ NULL /* tuple */ }, { "interval hour to second",/* type_name */ SQL_INTERVAL_HOUR_TO_SECOND,/* data_type */ 12, /* column_size */ "'", /* literal_prefix */ "'", /* literal_suffix */ "precision", /* create_params */ SQL_NULLABLE, /* nullable */ SQL_FALSE, /* case_sensitive */ SQL_PRED_BASIC, /* searchable */ -1, /* unsigned_attribute */ SQL_FALSE, /* fixed_prec_scale */ -1, /* auto_unique_value */ NULL, /* local_type_name */ 0, /* minimum_scale */ 0, /* maximum_scale */ SQL_INTERVAL, /* sql_data_type */ SQL_CODE_HOUR_TO_SECOND,/* sql_datetime_sub */ -1, /* num_prec_radix */ 6, /* interval_precision */ NULL /* tuple */ }, { "interval minute to second",/* type_name */ SQL_INTERVAL_MINUTE_TO_SECOND,/* data_type */ 13, /* column_size */ "'", /* literal_prefix */ "'", /* literal_suffix */ "precision", /* create_params */ SQL_NULLABLE, /* nullable */ SQL_FALSE, /* case_sensitive */ SQL_PRED_BASIC, /* searchable */ -1, /* unsigned_attribute */ SQL_FALSE, /* fixed_prec_scale */ -1, /* auto_unique_value */ NULL, /* local_type_name */ 0, /* minimum_scale */ 0, /* maximum_scale */ SQL_INTERVAL, /* sql_data_type */ SQL_CODE_MINUTE_TO_SECOND,/* sql_datetime_sub */ -1, /* num_prec_radix */ 10, /* interval_precision */ NULL /* tuple */ }};/* find some info about a type given the concise type */const char *ODBCGetTypeInfo(int concise_type, int *data_type, int *sql_data_type, int *sql_datetime_sub){ struct types *t; for (t = types; t < &types[sizeof(types) / sizeof(types[0])]; t++) { if (t->data_type == concise_type) { if (data_type) *data_type = t->data_type; if (sql_data_type) *sql_data_type = t->sql_data_type; if (sql_datetime_sub) *sql_datetime_sub = t->sql_datetime_sub; return t->type_name; } } return NULL;}static SQLRETURNSQLGetTypeInfo_(ODBCStmt *stmt, SQLSMALLINT nSqlDataType){ const char **tuples[sizeof(types) / sizeof(types[0])]; struct types *t; int i; switch (nSqlDataType) { case SQL_ALL_TYPES: case SQL_CHAR: case SQL_NUMERIC: case SQL_DECIMAL: case SQL_INTEGER: case SQL_SMALLINT: case SQL_FLOAT: case SQL_REAL: case SQL_DOUBLE: case SQL_DATE: case SQL_TIME: case SQL_TIMESTAMP: case SQL_VARCHAR: case SQL_TYPE_DATE: case SQL_TYPE_TIME: case SQL_TYPE_TIMESTAMP: case SQL_LONGVARCHAR: case SQL_BINARY: case SQL_VARBINARY: case SQL_LONGVARBINARY: case SQL_BIGINT: case SQL_TINYINT: case SQL_BIT: case SQL_WCHAR: case SQL_WVARCHAR: case SQL_WLONGVARCHAR: case SQL_GUID: case SQL_INTERVAL_YEAR: case SQL_INTERVAL_MONTH: case SQL_INTERVAL_DAY: case SQL_INTERVAL_HOUR: case SQL_INTERVAL_MINUTE: case SQL_INTERVAL_SECOND: case SQL_INTERVAL_YEAR_TO_MONTH: case SQL_INTERVAL_DAY_TO_HOUR: case SQL_INTERVAL_DAY_TO_MINUTE: case SQL_INTERVAL_DAY_TO_SECOND: case SQL_INTERVAL_HOUR_TO_MINUTE: case SQL_INTERVAL_HOUR_TO_SECOND: case SQL_INTERVAL_MINUTE_TO_SECOND: break; /* some pre ODBC 3.0 data types which can be mapped to ODBC 3.0 data types */ case -80: /* SQL_INTERVAL_YEAR */ nSqlDataType = SQL_INTERVAL_YEAR; break; case -81: /* SQL_INTERVAL_YEAR_TO_MONTH */ nSqlDataType = SQL_INTERVAL_YEAR_TO_MONTH; break; case -82: /* SQL_INTERVAL_MONTH */ nSqlDataType = SQL_INTERVAL_MONTH; break; case -83: /* SQL_INTERVAL_DAY */ nSqlDataType = SQL_INTERVAL_DAY; break; case -84: /* SQL_INTERVAL_HOUR */ nSqlDataType = SQL_INTERVAL_HOUR; break; case -85: /* SQL_INTERVAL_MINUTE */ nSqlDataType = SQL_INTERVAL_MINUTE; break; case -86: /* SQL_INTERVAL_SECOND */ nSqlDataType = SQL_INTERVAL_SECOND; break; case -87: /* SQL_INTERVAL_DAY_TO_HOUR */ nSqlDataType = SQL_INTERVAL_DAY_TO_HOUR; break; case -88: /* SQL_INTERVAL_DAY_TO_MINUTE */ nSqlDataType = SQL_INTERVAL_DAY_TO_MINUTE; break; case -89: /* SQL_INTERVAL_DAY_TO_SECOND */ nSqlDataType = SQL_INTERVAL_DAY_TO_SECOND; break; case -90: /* SQL_INTERVAL_HOUR_TO_MINUTE */ nSqlDataType = SQL_INTERVAL_HOUR_TO_MINUTE; break; case -91: /* SQL_INTERVAL_HOUR_TO_SECOND */ nSqlDataType = SQL_INTERVAL_HOUR_TO_SECOND; break; case -92: /* SQL_INTERVAL_MINUTE_TO_SECOND */ nSqlDataType = SQL_INTERVAL_MINUTE_TO_SECOND; break; case -95: /* SQL_UNICODE_CHAR and SQL_UNICODE */ nSqlDataType = SQL_WCHAR; break; case -96: /* SQL_UNICODE_VARCHAR */ nSqlDataType = SQL_WVARCHAR; break; case -97: /* SQL_UNICODE_LONGVARCHAR */ nSqlDataType = SQL_WLONGVARCHAR; break; default: /* Invalid SQL data type */ addStmtError(stmt, "HY004", NULL, 0); return SQL_ERROR; } for (t = types, i = 0; t < &types[sizeof(types) / sizeof(types[0])]; t++) { if (nSqlDataType == SQL_ALL_TYPES || nSqlDataType == t->data_type) { if (t->tuple == NULL) { char buf[32]; t->tuple = malloc(NCOLUMNS * sizeof(*t->tuple)); t->tuple[0] = t->type_name; snprintf(buf, sizeof(buf), "%d", t->data_type); t->tuple[1] = strdup(buf); if (t->column_size == -1) t->tuple[2] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->column_size); t->tuple[2] = strdup(buf); } t->tuple[3] = t->literal_prefix; t->tuple[4] = t->literal_suffix; t->tuple[5] = t->create_params; snprintf(buf, sizeof(buf), "%d", t->nullable); t->tuple[6] = strdup(buf); snprintf(buf, sizeof(buf), "%d", t->case_sensitive); t->tuple[7] = strdup(buf); snprintf(buf, sizeof(buf), "%d", t->searchable); t->tuple[8] = strdup(buf); if (t->unsigned_attribute == -1) t->tuple[9] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->unsigned_attribute); t->tuple[9] = strdup(buf); } snprintf(buf, sizeof(buf), "%d", t->fixed_prec_scale); t->tuple[10] = strdup(buf); if (t->auto_unique_value == -1) t->tuple[11] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->auto_unique_value); t->tuple[11] = strdup(buf); } t->tuple[12] = t->local_type_name; if (t->minimum_scale == -1) t->tuple[13] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->minimum_scale); t->tuple[13] = strdup(buf); } if (t->maximum_scale == -1) t->tuple[14] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->maximum_scale); t->tuple[14] = strdup(buf); } snprintf(buf, sizeof(buf), "%d", t->sql_data_type); t->tuple[15] = strdup(buf); if (t->sql_datetime_sub == -1) t->tuple[16] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->sql_datetime_sub); t->tuple[16] = strdup(buf); } if (t->num_prec_radix == -1) t->tuple[17] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->num_prec_radix); t->tuple[17] = strdup(buf); } if (t->interval_precision == -1) t->tuple[18] = NULL; else { snprintf(buf, sizeof(buf), "%d", t->interval_precision); t->tuple[18] = strdup(buf); } } tuples[i++] = t->tuple; } } mapi_virtual_result(stmt->hdl, NCOLUMNS, columnnames, columntypes, columnlengths, i, tuples); return ODBCInitResult(stmt);}SQLRETURN SQL_APISQLGetTypeInfo(SQLHSTMT hStmt, SQLSMALLINT nSqlDataType){ ODBCStmt *stmt = (ODBCStmt *) hStmt;#ifdef ODBCDEBUG ODBCLOG("SQLGetTypeInfo " PTRFMT " %d\n", PTRFMTCAST hStmt, nSqlDataType);#endif if (!isValidStmt(stmt)) return SQL_INVALID_HANDLE; clearStmtErrors(stmt); return SQLGetTypeInfo_(stmt, nSqlDataType);}#ifdef WITH_WCHARSQLRETURN SQL_APISQLGetTypeInfoA(SQLHSTMT hStmt, SQLSMALLINT nSqlDataType){ return SQLGetTypeInfo(hStmt, nSqlDataType);}SQLRETURN SQL_APISQLGetTypeInfoW(SQLHSTMT hStmt, SQLSMALLINT nSqlDataType){ ODBCStmt *stmt = (ODBCStmt *) hStmt;#ifdef ODBCDEBUG ODBCLOG("SQLGetTypeInfoW " PTRFMT " %d\n", PTRFMTCAST hStmt, nSqlDataType);#endif if (!isValidStmt(stmt)) return SQL_INVALID_HANDLE; clearStmtErrors(stmt); return SQLGetTypeInfo_(stmt, nSqlDataType);}#endif /* WITH_WCHAR */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?