char* convert_CFString_to_char(const CFStringRef str) { wchar_t *prov = convert_CFString_to_wchar (str); char *buffer = NULL; if (prov) { buffer = dm_SQL_W2A (prov, SQL_NTS); free(prov); } return buffer; }
static void _Conv_W2A(wchar_t *wdata, SQLLEN *pInd, UDWORD size) { char *data = (char *) wdata; if (*pInd != SQL_NULL_DATA) { char *buf = (char *)dm_SQL_W2A ((SQLWCHAR *) wdata, (ssize_t)*pInd); if (buf != NULL) strcpy(data, buf); MEM_FREE (buf); if (pInd && *pInd != SQL_NTS) *pInd /= sizeof (wchar_t); } }
void _trace_data ( SQLSMALLINT fCType, SQLPOINTER rgbValue, SQLLEN cbValueMax, SQLLEN * pcbValue, int output) { char buf[1024]; /* Temp buffer */ if (!rgbValue) { trace_emit ("\t\t%-15.15s 0x0\n", "SQLPOINTER"); return; } trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbValue); if (!output) return; /* Only print buffer content on leave */ switch (fCType) { case SQL_C_BINARY: { ssize_t len = cbValueMax; if (pcbValue) len = *pcbValue; if (len > cbValueMax) len = cbValueMax; trace_emit_binary ((unsigned char *) rgbValue, len); } break; case SQL_C_BIT: { int i = (int) *(char *) rgbValue; sprintf (buf, "%d", i > 0 ? 1 : 0); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_CHAR: { ssize_t len = cbValueMax; if (pcbValue) len = (long) *pcbValue; if (len > cbValueMax) len = cbValueMax; trace_emit_string ((SQLCHAR *) rgbValue, len, 0); } break; case SQL_C_DATE: #if ODBCVER >= 0x0300 case SQL_C_TYPE_DATE: #endif { DATE_STRUCT *d = (DATE_STRUCT *) rgbValue; sprintf (buf, "%04d-%02d-%02d", d->year, d->month, d->day); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_DEFAULT: /* * Not enough information to dump the content of the buffer */ return; case SQL_C_DOUBLE: { double d = *(double *) rgbValue; sprintf (buf, "%f", d); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_FLOAT: { float f = *(float *) rgbValue; sprintf (buf, "%f", f); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #if (ODBCVER >= 0x0350) case SQL_C_GUID: { SQLGUID *g = (SQLGUID *) rgbValue; sprintf (buf, "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", (unsigned long) g->Data1, g->Data2, g->Data3, g->Data4[0], g->Data4[1], g->Data4[2], g->Data4[3], g->Data4[4], g->Data4[5], g->Data4[6], g->Data4[7]); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #endif #if ODBCVER >= 0x0300 case SQL_C_INTERVAL_DAY: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days", (unsigned long) i->intval.day_second.day); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_HOUR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours %lu minutes", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_DAY_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu days %lu hours %lu minutes %lu seconds", (unsigned long) i->intval.day_second.day, (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours", (unsigned long) i->intval.day_second.hour); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR_TO_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours %lu minutes", (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_HOUR_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu hours %lu minutes %lu seconds", (unsigned long) i->intval.day_second.hour, (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MINUTE: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu minutes", (unsigned long) i->intval.day_second.minute); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MINUTE_TO_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu minutes %lu seconds", (unsigned long) i->intval.day_second.minute, (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_MONTH: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu months", (unsigned long) i->intval.year_month.month); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_SECOND: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu seconds", (unsigned long) i->intval.day_second.second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_YEAR: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu years", (unsigned long) i->intval.year_month.year); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_INTERVAL_YEAR_TO_MONTH: { SQL_INTERVAL_STRUCT *i = (SQL_INTERVAL_STRUCT *) rgbValue; sprintf (buf, "%lu years %lu months", (unsigned long) i->intval.year_month.year, (unsigned long) i->intval.year_month.month); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #endif case SQL_C_LONG: case SQL_C_SLONG: { long l = *(long *) rgbValue; sprintf (buf, "%ld", l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_ULONG: { unsigned long l = *(unsigned long *) rgbValue; sprintf (buf, "%lu", l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; #if ODBCVER >= 0x0300 case SQL_C_NUMERIC: /* NOT YET */ break; #endif #if ODBCVER >= 0x0300 case SQL_C_SBIGINT: #if defined (ODBCINT64) { ODBCINT64 l = *(ODBCINT64 *) rgbValue; sprintf (buf, "%lld", (long long int)l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } #endif break; case SQL_C_UBIGINT: #if defined (ODBCINT64) { unsigned ODBCINT64 l = *(unsigned ODBCINT64 *) rgbValue; sprintf (buf, "%llu", (long long unsigned int)l); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } #endif break; #endif case SQL_C_SHORT: case SQL_C_SSHORT: { int i = (int) *(short *) rgbValue; sprintf (buf, "%d", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_USHORT: { unsigned int i = (unsigned int) *(unsigned short *) rgbValue; sprintf (buf, "%u", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TIME: #if ODBCVER >= 0x0300 case SQL_C_TYPE_TIME: #endif { TIME_STRUCT *t = (TIME_STRUCT *) rgbValue; sprintf (buf, "%02d:%02d:%02d", t->hour, t->minute, t->second); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TIMESTAMP: #if ODBCVER >= 0x0300 case SQL_C_TYPE_TIMESTAMP: #endif { TIMESTAMP_STRUCT *t = (TIMESTAMP_STRUCT *) rgbValue; sprintf (buf, "%04d-%02d-%02d %02d:%02d:%02d.%06ld", t->year, t->month, t->day, t->hour, t->minute, t->second, (long) t->fraction); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_TINYINT: case SQL_C_STINYINT: { int i = (int) *(char *) rgbValue; sprintf (buf, "%d", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_UTINYINT: { unsigned int i = (unsigned int) *(unsigned char *) rgbValue; sprintf (buf, "%u", i); trace_emit_string ((SQLCHAR *) buf, SQL_NTS, 0); } break; case SQL_C_WCHAR: { SQLCHAR *wstr; ssize_t len; if (pcbValue) len = (ssize_t) *pcbValue; if (len > cbValueMax) len = cbValueMax; wstr = dm_SQL_W2A ((wchar_t *) rgbValue, len); trace_emit_string (wstr, SQL_NTS, 1); free (wstr); } break; default: /* * Unhandled/Unknown datatype */ break; } return; }
SQLRETURN SQL_API SQLSetCursorName_Internal ( SQLHSTMT hstmt, SQLPOINTER szCursor, SQLSMALLINT cbCursor, SQLCHAR waMode) { STMT (pstmt, hstmt); CONN (pdbc, pstmt->hdbc); ENVR (penv, pdbc->henv); HPROC hproc = SQL_NULL_HPROC; SQLRETURN retcode = SQL_SUCCESS; sqlstcode_t sqlstat = en_00000; void * _Cursor = NULL; if (szCursor == NULL) { PUSHSQLERR (pstmt->herr, en_S1009); return SQL_ERROR; } if (cbCursor < 0 && cbCursor != SQL_NTS) { PUSHSQLERR (pstmt->herr, en_S1090); return SQL_ERROR; } /* check state */ if (pstmt->asyn_on != en_NullProc) { sqlstat = en_S1010; } else { switch (pstmt->state) { case en_stmt_executed_with_info: case en_stmt_executed: case en_stmt_cursoropen: case en_stmt_fetched: case en_stmt_xfetched: sqlstat = en_24000; break; case en_stmt_needdata: case en_stmt_mustput: case en_stmt_canput: sqlstat = en_S1010; break; default: break; } } if (sqlstat != en_00000) { PUSHSQLERR (pstmt->herr, sqlstat); return SQL_ERROR; } if ((penv->unicode_driver && waMode != 'W') || (!penv->unicode_driver && waMode == 'W')) { if (waMode != 'W') { /* ansi=>unicode*/ _Cursor = dm_SQL_A2W ((SQLCHAR *) szCursor, cbCursor); } else { /* unicode=>ansi*/ _Cursor = dm_SQL_W2A ((SQLWCHAR *) szCursor, cbCursor); } szCursor = _Cursor; cbCursor = SQL_NTS; } CALL_UDRIVER(pstmt->hdbc, pstmt, retcode, hproc, penv->unicode_driver, en_SetCursorName, ( pstmt->dhstmt, szCursor, cbCursor)); MEM_FREE(_Cursor); if (hproc == SQL_NULL_HPROC) { PUSHSQLERR (pstmt->herr, en_IM001); return SQL_ERROR; } if (SQL_SUCCEEDED (retcode)) { pstmt->cursor_state = en_stmt_cursor_named; } return retcode; }
/* * Decode the various GetInfo return values and print them into the trace log */ static void _trace_getinfo ( SQLUSMALLINT fInfoType, SQLPOINTER rgbInfoValue, SQLSMALLINT cbInfoValueMax, SQLSMALLINT * pcbInfoValue, int output, char waMode) { char *infoname; char **mask; int elem; int i; cbInfoValueMax = cbInfoValueMax; /*UNUSED*/ pcbInfoValue = pcbInfoValue; /*UNUSED*/ /* * If the pointer is NULL, we have no information to decode, so * we just print the generic details. */ if (!rgbInfoValue) output = 0; switch (fInfoType) { /* * ODBC 1.0 */ I_STR (SQL_ACCESSIBLE_TABLES); I_STR (SQL_ACCESSIBLE_PROCEDURES); #if (ODBCVER < 0x0300) I_INT16 (SQL_ACTIVE_CONNECTIONS); /* 3.0: SQL_MAX_DRIVER_CONNECTIONS */ #endif #if (ODBCVER < 0x0300) I_INT16 (SQL_ACTIVE_STATEMENTS); /* 3.0: SQL_MAX_CONCURRENT_ACTIVITIES */ #endif I_SVAL (SQL_CONCAT_NULL_BEHAVIOR); I_MASK (SQL_CONVERT_FUNCTIONS); I_MASK1 (SQL_CONVERT_BIGINT, CONVERT); I_MASK1 (SQL_CONVERT_BINARY, CONVERT); I_MASK1 (SQL_CONVERT_BIT, CONVERT); I_MASK1 (SQL_CONVERT_CHAR, CONVERT); I_MASK1 (SQL_CONVERT_DATE, CONVERT); I_MASK1 (SQL_CONVERT_DECIMAL, CONVERT); I_MASK1 (SQL_CONVERT_DOUBLE, CONVERT); I_MASK1 (SQL_CONVERT_FLOAT, CONVERT); I_MASK1 (SQL_CONVERT_INTEGER, CONVERT); I_MASK1 (SQL_CONVERT_LONGVARBINARY, CONVERT); I_MASK1 (SQL_CONVERT_LONGVARCHAR, CONVERT); I_MASK1 (SQL_CONVERT_NUMERIC, CONVERT); I_MASK1 (SQL_CONVERT_REAL, CONVERT); I_MASK1 (SQL_CONVERT_SMALLINT, CONVERT); I_MASK1 (SQL_CONVERT_TIME, CONVERT); I_MASK1 (SQL_CONVERT_TIMESTAMP, CONVERT); I_MASK1 (SQL_CONVERT_TINYINT, CONVERT); I_MASK1 (SQL_CONVERT_VARBINARY, CONVERT); I_MASK1 (SQL_CONVERT_VARCHAR, CONVERT); I_SVAL1 (SQL_CURSOR_COMMIT_BEHAVIOR, CURSOR_BEHAVIOR); I_SVAL1 (SQL_CURSOR_ROLLBACK_BEHAVIOR, CURSOR_BEHAVIOR); I_STR (SQL_DATA_SOURCE_NAME); I_STR (SQL_DATA_SOURCE_READ_ONLY); I_STR (SQL_DATABASE_NAME); I_STR (SQL_DBMS_NAME); I_STR (SQL_DBMS_VER); I_MASK1 (SQL_DEFAULT_TXN_ISOLATION, TXN_ISOLATION); I_INT32 (SQL_DRIVER_HDBC); I_INT32 (SQL_DRIVER_HENV); I_INT32 (SQL_DRIVER_HSTMT); I_STR (SQL_DRIVER_NAME); I_STR (SQL_DRIVER_VER); I_STR (SQL_EXPRESSIONS_IN_ORDERBY); I_MASK (SQL_FETCH_DIRECTION); I_SVAL1 (SQL_IDENTIFIER_CASE, IDENTIFIER_CASE); I_STR (SQL_IDENTIFIER_QUOTE_CHAR); I_INT16 (SQL_MAX_COLUMN_NAME_LEN); I_INT16 (SQL_MAX_CURSOR_NAME_LEN); #if (ODBCVER < 0x0300) I_INT16 (SQL_MAX_OWNER_NAME_LEN); /* 3.0: SQL_MAX_SCHEMA_NAME_LEN */ #endif I_INT16 (SQL_MAX_PROCEDURE_NAME_LEN); #if (ODBCVER < 0x0300) I_INT16 (SQL_MAX_QUALIFIER_NAME_LEN); /* 3.0: SQL_MAX_CATALOG_NAME_LEN */ #endif I_INT16 (SQL_MAX_TABLE_NAME_LEN); I_STR (SQL_MULT_RESULT_SETS); I_STR (SQL_MULTIPLE_ACTIVE_TXN); I_MASK (SQL_NUMERIC_FUNCTIONS); I_SVAL (SQL_ODBC_API_CONFORMANCE); I_SVAL (SQL_ODBC_SAG_CLI_CONFORMANCE); I_SVAL (SQL_ODBC_SQL_CONFORMANCE); I_STR (SQL_ODBC_VER); #if (ODBCVER < 0x0300) I_STR (SQL_ODBC_SQL_OPT_IEF); /* 3.0: SQL_INTEGRITY */ #endif #if (ODBCVER < 0x0300) I_STR (SQL_OWNER_TERM); /* 3.0: SQL_SCHEMA_TERM */ #endif I_STR (SQL_OUTER_JOINS); I_STR (SQL_PROCEDURE_TERM); I_STR (SQL_PROCEDURES); #if (ODBCVER < 0x0300) I_STR (SQL_QUALIFIER_NAME_SEPARATOR); /* 3.0: SQL_CATALOG_NAME_SEPARATOR */ #endif #if (ODBCVER < 0x0300) I_STR (SQL_QUALIFIER_TERM); /* 3.0: SQL_CATALOG_TERM */ #endif I_STR (SQL_ROW_UPDATES); I_MASK (SQL_SCROLL_CONCURRENCY); I_MASK (SQL_SCROLL_OPTIONS); I_STR (SQL_SEARCH_PATTERN_ESCAPE); I_STR (SQL_SERVER_NAME); I_MASK (SQL_STRING_FUNCTIONS); I_MASK (SQL_SYSTEM_FUNCTIONS); I_STR (SQL_TABLE_TERM); I_MASK (SQL_TIMEDATE_FUNCTIONS); I_SVAL (SQL_TXN_CAPABLE); I_MASK1 (SQL_TXN_ISOLATION_OPTION, TXN_ISOLATION); I_STR (SQL_USER_NAME); /* * ODBC 1.0 Additions */ I_SVAL (SQL_CORRELATION_NAME); I_SVAL (SQL_NON_NULLABLE_COLUMNS); /* * ODBC 2.0 Additions */ I_MASK (SQL_ALTER_TABLE); I_MASK (SQL_BOOKMARK_PERSISTENCE); I_STR (SQL_COLUMN_ALIAS); I_INT32 (SQL_DRIVER_HLIB); I_STR (SQL_DRIVER_ODBC_VER); I_MASK (SQL_GETDATA_EXTENSIONS); I_SVAL (SQL_GROUP_BY); I_SVAL (SQL_FILE_USAGE); I_STR (SQL_KEYWORDS); I_STR (SQL_LIKE_ESCAPE_CLAUSE); I_MASK (SQL_LOCK_TYPES); I_INT32 (SQL_MAX_BINARY_LITERAL_LEN); I_INT32 (SQL_MAX_CHAR_LITERAL_LEN); I_INT16 (SQL_MAX_COLUMNS_IN_GROUP_BY); I_INT16 (SQL_MAX_COLUMNS_IN_INDEX); I_INT16 (SQL_MAX_COLUMNS_IN_ORDER_BY); I_INT16 (SQL_MAX_COLUMNS_IN_SELECT); I_INT16 (SQL_MAX_COLUMNS_IN_TABLE); I_INT32 (SQL_MAX_INDEX_SIZE); I_STR (SQL_MAX_ROW_SIZE_INCLUDES_LONG); I_INT32 (SQL_MAX_ROW_SIZE); I_INT32 (SQL_MAX_STATEMENT_LEN); I_INT16 (SQL_MAX_TABLES_IN_SELECT); I_INT16 (SQL_MAX_USER_NAME_LEN); I_STR (SQL_NEED_LONG_DATA_LEN); I_SVAL (SQL_NULL_COLLATION); I_STR (SQL_ORDER_BY_COLUMNS_IN_SELECT); #if (ODBCVER < 0x0300) I_MASK (SQL_OWNER_USAGE); /* 3.0: SQL_SCHEMA_USAGE */ #endif I_MASK (SQL_OJ_CAPABILITIES); I_MASK (SQL_POS_OPERATIONS); I_MASK (SQL_POSITIONED_STATEMENTS); #if (ODBCVER < 0x0300) I_SVAL (SQL_QUALIFIER_LOCATION); /* 3.0: SQL_CATALOG_LOCATION */ #endif #if (ODBCVER < 0x0300) I_MASK (SQL_QUALIFIER_USAGE); /* 3.0: SQL_CATALOG_USAGE */ #endif I_SVAL1 (SQL_QUOTED_IDENTIFIER_CASE, IDENTIFIER_CASE); I_STR (SQL_SPECIAL_CHARACTERS); I_MASK (SQL_STATIC_SENSITIVITY); I_MASK (SQL_SUBQUERIES); I_MASK1 (SQL_TIMEDATE_ADD_INTERVALS, TIMEDATE_INTERVALS); I_MASK1 (SQL_TIMEDATE_DIFF_INTERVALS, TIMEDATE_INTERVALS); I_MASK (SQL_UNION); /* * ODBC 3.0 */ #if (ODBCVER >= 0x0300) I_INT16 (SQL_ACTIVE_ENVIRONMENTS); I_MASK (SQL_AGGREGATE_FUNCTIONS); I_MASK (SQL_ALTER_DOMAIN); I_SVAL (SQL_ASYNC_MODE); I_MASK (SQL_BATCH_ROW_COUNT); I_MASK (SQL_BATCH_SUPPORT); I_SVAL (SQL_CATALOG_LOCATION); I_STR (SQL_CATALOG_NAME); I_STR (SQL_CATALOG_NAME_SEPARATOR); I_STR (SQL_CATALOG_TERM); I_MASK (SQL_CATALOG_USAGE); I_STR (SQL_COLLATION_SEQ); I_MASK1 (SQL_CONVERT_INTERVAL_YEAR_MONTH, CONVERT); I_MASK1 (SQL_CONVERT_INTERVAL_DAY_TIME, CONVERT); I_MASK1 (SQL_CONVERT_WCHAR, CONVERT); I_MASK1 (SQL_CONVERT_WLONGVARCHAR, CONVERT); I_MASK1 (SQL_CONVERT_WVARCHAR, CONVERT); I_MASK (SQL_CREATE_ASSERTION); I_MASK (SQL_CREATE_CHARACTER_SET); I_MASK (SQL_CREATE_COLLATION); I_MASK (SQL_CREATE_DOMAIN); I_MASK (SQL_CREATE_SCHEMA); I_MASK (SQL_CREATE_TABLE); I_MASK (SQL_CREATE_TRANSLATION); I_MASK (SQL_CREATE_VIEW); I_SVAL (SQL_CURSOR_SENSITIVITY); I_MASK (SQL_DATETIME_LITERALS); I_MASK (SQL_DDL_INDEX); I_STR (SQL_DESCRIBE_PARAMETER); I_STR (SQL_DM_VER); I_MASK (SQL_DTC_TRANSITION_COST); I_MASK (SQL_DROP_ASSERTION); I_MASK (SQL_DROP_CHARACTER_SET); I_MASK (SQL_DROP_COLLATION); I_MASK (SQL_DROP_DOMAIN); I_MASK (SQL_DROP_SCHEMA); I_MASK (SQL_DROP_TABLE); I_MASK (SQL_DROP_TRANSLATION); I_MASK (SQL_DROP_VIEW); I_MASK1 (SQL_DYNAMIC_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_DYNAMIC_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_MASK1 (SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_MASK (SQL_INDEX_KEYWORDS); I_MASK (SQL_INFO_SCHEMA_VIEWS); I_MASK (SQL_INSERT_STATEMENT); I_STR (SQL_INTEGRITY); I_MASK1 (SQL_KEYSET_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_KEYSET_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_INT32 (SQL_MAX_ASYNC_CONCURRENT_STATEMENTS); I_INT16 (SQL_MAX_CATALOG_NAME_LEN); I_INT16 (SQL_MAX_CONCURRENT_ACTIVITIES); I_INT16 (SQL_MAX_DRIVER_CONNECTIONS); I_INT16 (SQL_MAX_IDENTIFIER_LEN); I_INT16 (SQL_MAX_SCHEMA_NAME_LEN); I_SVAL (SQL_ODBC_INTERFACE_CONFORMANCE); I_SVAL (SQL_PARAM_ARRAY_ROW_COUNTS); I_SVAL (SQL_PARAM_ARRAY_SELECTS); I_STR (SQL_SCHEMA_TERM); I_MASK (SQL_SCHEMA_USAGE); I_SVAL (SQL_SQL_CONFORMANCE); I_MASK (SQL_SQL92_DATETIME_FUNCTIONS); I_MASK (SQL_SQL92_FOREIGN_KEY_DELETE_RULE); I_MASK (SQL_SQL92_FOREIGN_KEY_UPDATE_RULE); I_MASK (SQL_SQL92_GRANT); I_MASK (SQL_SQL92_NUMERIC_VALUE_FUNCTIONS); I_MASK (SQL_SQL92_PREDICATES); I_MASK (SQL_SQL92_RELATIONAL_JOIN_OPERATORS); I_MASK (SQL_SQL92_REVOKE); I_MASK (SQL_SQL92_ROW_VALUE_CONSTRUCTOR); I_MASK (SQL_SQL92_STRING_FUNCTIONS); I_MASK (SQL_SQL92_VALUE_EXPRESSIONS); I_MASK (SQL_STANDARD_CLI_CONFORMANCE); I_MASK1 (SQL_STATIC_CURSOR_ATTRIBUTES1, CURSOR_ATTRIBUTES1); I_MASK1 (SQL_STATIC_CURSOR_ATTRIBUTES2, CURSOR_ATTRIBUTES2); I_STR (SQL_XOPEN_CLI_YEAR); #endif default: infoname = "unknown or driver specific"; break; } /* * If we arrive here, just print the generic pointer information */ trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); if (rgbInfoValue) trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbInfoValue); else trace_emit ("\t\t%-15.15s 0x0\n", "SQLPOINTER"); goto print_end; print_int16: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((short *) rgbInfoValue)); goto print_end; print_int32: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((int *) rgbInfoValue)); goto print_end; print_string: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p\n", "SQLPOINTER", rgbInfoValue); if (waMode == 'A') trace_emit_string ((SQLCHAR *) rgbInfoValue, pcbInfoValue ? *pcbInfoValue : SQL_NTS, 0); else { SQLCHAR *str_u8 = dm_SQL_W2A ((SQLWCHAR *) rgbInfoValue, pcbInfoValue ? *pcbInfoValue : SQL_NTS); trace_emit_string (str_u8, SQL_NTS, 1); free (str_u8); } goto print_end; print_mask: trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (0x%lX)\n", "SQLPOINTER", rgbInfoValue, (unsigned long) *((unsigned int *) rgbInfoValue)); if (*(int *) rgbInfoValue == 0) trace_emit ("\t\t\t\t | %-40.40s |\n", mask[0]); else { register unsigned int val = *(unsigned int *) rgbInfoValue; for (i = 1; i < 32; i++) { if (val & (1 << (i - 1))) { if (i < elem) trace_emit ("\t\t\t\t | %-40.40s |\n", mask[i]); else trace_emit ("\t\t\t\t | %-40.40s |\n", "UNKNOWN"); } } } goto print_end; print_svalue: i = *((short *) rgbInfoValue); trace_emit ("\t\t%-15.15s %d (%s)\n", "SQLUSMALLINT", fInfoType, infoname); trace_emit ("\t\t%-15.15s %p (%ld)\n", "SQLPOINTER", rgbInfoValue, (long) *((SQLSMALLINT *) rgbInfoValue)); trace_emit ("\t\t\t\t | %-40.40s |\n", (i < elem) ? mask[i] : "UNKNOWN"); goto print_end; /* * All done */ print_end: return; }