📄 sqlgetinfo.c
字号:
/* * The contents of this file are subject to the MonetDB Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://monetdb.cwi.nl/Legal/MonetDBLicense-1.1.html * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * The Original Code is the MonetDB Database System. * * The Initial Developer of the Original Code is CWI. * Portions created by CWI are Copyright (C) 1997-2007 CWI. * All Rights Reserved. *//* * This code was created by Peter Harvey (mostly during Christmas 98/99). * This code is LGPL. Please ensure that this message remains in future * distributions and uses of this code (thats about all I get out of it). * - Peter Harvey pharvey@codebydesign.com * * This file has been modified for the MonetDB project. See the file * Copyright in this directory for more information. *//********************************************************************** * SQLGetInfo() * CLI Compliance: ISO 92 * * Author: Martin van Dinther * Date : 30 Aug 2002 * **********************************************************************/#include "ODBCGlobal.h"#include "ODBCDbc.h"#include "ODBCUtil.h"static SQLRETURNSQLGetInfo_(ODBCDbc *dbc, SQLUSMALLINT nInfoType, SQLPOINTER pInfoValue, SQLSMALLINT nInfoValueMax, SQLSMALLINT *pnLength){ int nValue = 0; const char *sValue = NULL; /* iff non-NULL, return string value */ int len = 0; /* For some info types an active connection is needed */ if (!dbc->Connected && (nInfoType == SQL_DATA_SOURCE_NAME || nInfoType == SQL_SERVER_NAME || nInfoType == SQL_DATABASE_NAME || nInfoType == SQL_USER_NAME)) { /* Connection does not exist */ addDbcError(dbc, "08003", NULL, 0); return SQL_ERROR; } switch (nInfoType) { case SQL_ACCESSIBLE_PROCEDURES: sValue = "Y"; break; case SQL_ACCESSIBLE_TABLES: sValue = "N"; break; case SQL_ACTIVE_ENVIRONMENTS: nValue = 0; /* 0 = no limit */ len = sizeof(SQLUSMALLINT); break; case SQL_AGGREGATE_FUNCTIONS: nValue = SQL_AF_ALL | SQL_AF_AVG | SQL_AF_COUNT | SQL_AF_DISTINCT | SQL_AF_MAX | SQL_AF_MIN | SQL_AF_SUM; len = sizeof(SQLUINTEGER); break; case SQL_ALTER_DOMAIN: nValue = 0; /* SQL_AD_ADD_CONSTRAINT_DEFERRABLE | SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED | SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE | SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE | SQL_AD_ADD_DOMAIN_CONSTRAINT | SQL_AD_ADD_DOMAIN_DEFAULT | SQL_AD_CONSTRAINT_NAME_DEFINITION | SQL_AD_DROP_DOMAIN_CONSTRAINT | SQL_AD_DROP_DOMAIN_DEFAULT */ len = sizeof(SQLUINTEGER); break; case SQL_ALTER_TABLE: nValue = SQL_AT_ADD_COLUMN_DEFAULT | SQL_AT_ADD_COLUMN_SINGLE | SQL_AT_ADD_CONSTRAINT | SQL_AT_ADD_TABLE_CONSTRAINT | SQL_AT_CONSTRAINT_NAME_DEFINITION | SQL_AT_DROP_COLUMN_RESTRICT | SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT | SQL_AT_SET_COLUMN_DEFAULT; /* SQL_AT_ADD_COLUMN_SINGLE | SQL_AT_ADD_COLUMN_COLLATION | SQL_AT_ADD_COLUMN_DEFAULT | SQL_AT_ADD_TABLE_CONSTRAINT | SQL_AT_ADD_TABLE_CONSTRAINT | SQL_AT_CONSTRAINT_DEFERRABLE | SQL_AT_CONSTRAINT_INITIALLY_DEFERRED | SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE | SQL_AT_CONSTRAINT_NAME_DEFINITION | SQL_AT_DROP_COLUMN_CASCADE | SQL_AT_DROP_COLUMN_DEFAULT | SQL_AT_DROP_COLUMN_RESTRICT | SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE | SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT | SQL_AT_SET_COLUMN_DEFAULT | SQL_AT_CONSTRAINT_NON_DEFERRABLE */ len = sizeof(SQLUINTEGER); break; case SQL_ASYNC_MODE: nValue = SQL_AM_NONE; /* SQL_AM_CONNECTION, SQL_AM_STATEMENT */ len = sizeof(SQLUINTEGER); break; case SQL_BATCH_ROW_COUNT: nValue = SQL_BRC_EXPLICIT; /* SQL_BRC_PROCEDURES | SQL_BRC_ROLLED_UP */ len = sizeof(SQLUINTEGER); break; case SQL_BATCH_SUPPORT: nValue = SQL_BS_ROW_COUNT_EXPLICIT | SQL_BS_SELECT_EXPLICIT; /* SQL_BS_ROW_COUNT_PROC | SQL_BS_SELECT_PROC */ len = sizeof(SQLUINTEGER); break; case SQL_BOOKMARK_PERSISTENCE: nValue = 0; /* bookmarks not supported */ /* SQL_BP_CLOSE | SQL_BP_DELETE | SQL_BP_DROP | SQL_BP_OTHER_HSTMT | SQL_BP_TRANSACTION | SQL_BP_UPDATE */ len = sizeof(SQLUINTEGER); break; case SQL_CATALOG_LOCATION: nValue = 0; /* catalogs not supported */ /* SQL_CL_END, SQL_CL_START */ len = sizeof(SQLUSMALLINT); break; case SQL_CATALOG_NAME: sValue = "N"; break; case SQL_CATALOG_NAME_SEPARATOR: case SQL_CATALOG_TERM: sValue = ""; break; case SQL_CATALOG_USAGE: nValue = 0; /* SQL_CU_DML_STATEMENTS | SQL_CU_INDEX_DEFINITION | SQL_CU_PRIVILEGE_DEFINITION | SQL_CU_PROCEDURE_INVOCATION | SQL_CU_TABLE_DEFINITION */ len = sizeof(SQLUINTEGER); break; case SQL_COLLATION_SEQ: sValue = "UTF-8"; break; case SQL_COLUMN_ALIAS: sValue = "Y"; break; case SQL_CONCAT_NULL_BEHAVIOR: nValue = SQL_CB_NULL; /* SQL_CB_NON_NULL */ len = sizeof(SQLUSMALLINT); break; case SQL_CONVERT_BIGINT: case SQL_CONVERT_BINARY: case SQL_CONVERT_BIT: case SQL_CONVERT_CHAR: case SQL_CONVERT_DATE: case SQL_CONVERT_DECIMAL: case SQL_CONVERT_DOUBLE: case SQL_CONVERT_FLOAT: case SQL_CONVERT_INTEGER: case SQL_CONVERT_INTERVAL_DAY_TIME: case SQL_CONVERT_INTERVAL_YEAR_MONTH: case SQL_CONVERT_LONGVARBINARY: case SQL_CONVERT_LONGVARCHAR: case SQL_CONVERT_NUMERIC: case SQL_CONVERT_REAL: case SQL_CONVERT_SMALLINT: case SQL_CONVERT_TIME: case SQL_CONVERT_TIMESTAMP: case SQL_CONVERT_TINYINT: case SQL_CONVERT_VARBINARY: case SQL_CONVERT_VARCHAR: nValue = SQL_CVT_BIGINT | SQL_CVT_BINARY | SQL_CVT_BIT | SQL_CVT_CHAR | SQL_CVT_DATE | SQL_CVT_DECIMAL | SQL_CVT_DOUBLE | SQL_CVT_FLOAT | SQL_CVT_INTEGER | SQL_CVT_INTERVAL_DAY_TIME | SQL_CVT_INTERVAL_YEAR_MONTH | SQL_CVT_LONGVARBINARY | SQL_CVT_LONGVARCHAR | SQL_CVT_NUMERIC | SQL_CVT_REAL | SQL_CVT_SMALLINT | SQL_CVT_TIME | SQL_CVT_TIMESTAMP | SQL_CVT_TINYINT | SQL_CVT_VARBINARY | SQL_CVT_VARCHAR; /* SQL_CVT_GUID */ len = sizeof(SQLUINTEGER); break; case SQL_CONVERT_FUNCTIONS: /* No convert function supported */ nValue = SQL_FN_CVT_CAST | SQL_FN_CVT_CONVERT; len = sizeof(SQLUINTEGER); break; case SQL_CORRELATION_NAME: nValue = SQL_CN_ANY; /* SQL_CN_DIFFERENT, SQL_CN_NONE */ len = sizeof(SQLUSMALLINT); break; case SQL_CREATE_ASSERTION: /* SQL_CA_CREATE_ASSERTION | SQL_CA_CONSTRAINT_DEFERRABLE | SQL_CA_CONSTRAINT_INITIALLY_DEFERRED | SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE | SQL_CA_CONSTRAINT_NON_DEFERRABLE */ case SQL_CREATE_CHARACTER_SET: /* SQL_CCS_CREATE_CHARACTER_SET | SQL_CCS_COLLATE_CLAUSE | SQL_CCS_LIMITED_COLLATION */ case SQL_CREATE_COLLATION: /* SQL_CCOL_CREATE_COLLATION */ case SQL_CREATE_DOMAIN: /* SQL_CDO_CREATE_DOMAIN | SQL_CDO_CONSTRAINT_NAME_DEFINITION | SQL_CDO_DEFAULT | SQL_CDO_CONSTRAINT | SQL_CDO_COLLATION | SQL_CDO_CONSTRAINT_DEFERRABLE | SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED | SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE | SQL_CDO_CONSTRAINT_NON_DEFERRABLE */ case SQL_CREATE_TRANSLATION: /* SQL_CTR_CREATE_TRANSLATION */ nValue = 0; len = sizeof(SQLUINTEGER); break; case SQL_CREATE_SCHEMA: nValue = SQL_CS_CREATE_SCHEMA | SQL_CS_AUTHORIZATION; /* SQL_CS_DEFAULT_CHARACTER_SET */ len = sizeof(SQLUINTEGER); break; case SQL_CREATE_TABLE: nValue = SQL_CT_COLUMN_CONSTRAINT | SQL_CT_COLUMN_DEFAULT | SQL_CT_COMMIT_PRESERVE | SQL_CT_CONSTRAINT_NAME_DEFINITION | SQL_CT_CREATE_TABLE | SQL_CT_GLOBAL_TEMPORARY | SQL_CT_LOCAL_TEMPORARY | SQL_CT_TABLE_CONSTRAINT; /* SQL_CT_COLUMN_COLLATION | SQL_CT_COMMIT_DELETE | SQL_CT_CONSTRAINT_DEFERRABLE | SQL_CT_CONSTRAINT_INITIALLY_DEFERRED | SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE | SQL_CT_CONSTRAINT_NON_DEFERRABLE */ len = sizeof(SQLUINTEGER); break; case SQL_CREATE_VIEW: nValue = SQL_CV_CREATE_VIEW | SQL_CV_CHECK_OPTION; len = sizeof(SQLUINTEGER); break; case SQL_CURSOR_COMMIT_BEHAVIOR: case SQL_CURSOR_ROLLBACK_BEHAVIOR: nValue = SQL_CB_DELETE; /* SQL_CB_CLOSE, SQL_CB_PRESERVE */ len = sizeof(SQLUSMALLINT); break; case SQL_CURSOR_SENSITIVITY: nValue = SQL_INSENSITIVE; /* SQL_SENSITIVE, SQL_UNSPECIFIED */ len = sizeof(SQLUINTEGER); break; case SQL_DATA_SOURCE_NAME: sValue = dbc->dsn ? dbc->dsn : ""; break; case SQL_DATA_SOURCE_READ_ONLY: sValue = "N"; break; case SQL_DATABASE_NAME: sValue = dbc->dbname ? dbc->dbname : ""; break; case SQL_ODBC_INTERFACE_CONFORMANCE: nValue = SQL_OIC_CORE; len = sizeof(SQLUINTEGER); break; case SQL_SCROLL_OPTIONS: nValue = SQL_SO_STATIC; /* SQL_SO_DYNAMIC, SQL_SO_FORWARD_ONLY, SQL_SO_KEYSET_DRIVEN, SQL_SO_MIXED */ len = sizeof(SQLUINTEGER); break; case SQL_DYNAMIC_CURSOR_ATTRIBUTES1: case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1: case SQL_KEYSET_CURSOR_ATTRIBUTES1: case SQL_DYNAMIC_CURSOR_ATTRIBUTES2: case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2: case SQL_KEYSET_CURSOR_ATTRIBUTES2: nValue = 0; len = sizeof(SQLUINTEGER); break; /* the above values have been checked */ case SQL_STATIC_CURSOR_ATTRIBUTES1: /* SQL_CA1_BOOKMARK | SQL_CA1_BULK_ADD | SQL_CA1_BULK_DELETE_BY_BOOKMARK | SQL_CA1_BULK_FETCH_BY_BOOKMARK | SQL_CA1_BULK_UPDATE_BY_BOOKMARK | SQL_CA1_LOCK_EXCLUSIVE | SQL_CA1_LOCK_UNLOCK | SQL_CA1_POS_DELETE | SQL_CA1_POSITIONED_DELETE | SQL_CA1_POSITIONED_UPDATE | SQL_CA1_POS_REFRESH | SQL_CA1_POS_UPDATE | SQL_CA1_SELECT_FOR_UPDATE */ nValue = SQL_CA1_ABSOLUTE | SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_NEXT | SQL_CA1_POS_POSITION | SQL_CA1_RELATIVE; len = sizeof(SQLUINTEGER); break; case SQL_STATIC_CURSOR_ATTRIBUTES2: /* SQL_CA2_CRC_APPROXIMATE | SQL_CA2_LOCK_CONCURRENCY | SQL_CA2_MAX_ROWS_AFFECTS_ALL | SQL_CA2_MAX_ROWS_CATALOG | SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_INSERT | SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_OPT_ROWVER_CONCURRENCY | SQL_CA2_OPT_VALUES_CONCURRENCY | SQL_CA2_READ_ONLY_CONCURRENCY | SQL_CA2_SENSITIVITY_ADDITIONS | SQL_CA2_SENSITIVITY_DELETIONS | SQL_CA2_SENSITIVITY_UPDATES | SQL_CA2_SIMULATE_NON_UNIQUE | SQL_CA2_SIMULATE_TRY_UNIQUE | SQL_CA2_SIMULATE_UNIQUE */ nValue = SQL_CA2_CRC_EXACT; len = sizeof(SQLUINTEGER); break; case SQL_SQL_CONFORMANCE: nValue = SQL_SC_SQL92_FULL; len = sizeof(SQLUINTEGER); break; case SQL_MAX_DRIVER_CONNECTIONS: nValue = 0; /* 0 = No specified limit */ len = sizeof(SQLUSMALLINT); break; case SQL_MAX_CONCURRENT_ACTIVITIES: nValue = 0; /* 0 = No specified limit */ len = sizeof(SQLUSMALLINT); break; case SQL_DRIVER_NAME: sValue = MONETDB_DRIVER_NAME; break; case SQL_DRIVER_VER: sValue = MONETDB_DRIVER_VER; break; case SQL_FETCH_DIRECTION: nValue = SQL_FD_FETCH_NEXT; len = sizeof(SQLUSMALLINT); break; case SQL_ODBC_API_CONFORMANCE: nValue = SQL_OIC_CORE; len = sizeof(SQLUSMALLINT); break; case SQL_ODBC_VER: case SQL_DRIVER_ODBC_VER: sValue = MONETDB_ODBC_VER; break; case SQL_ROW_UPDATES: sValue = "N"; break; case SQL_ODBC_SAG_CLI_CONFORMANCE: nValue = SQL_OSCC_COMPLIANT; len = sizeof(SQLUSMALLINT); break; case SQL_SERVER_NAME: sValue = MONETDB_SERVER_NAME; break; case SQL_SEARCH_PATTERN_ESCAPE: sValue = ""; /* No search-char. escape char. */ break; case SQL_ODBC_SQL_CONFORMANCE: nValue = SQL_OSC_CORE; len = sizeof(SQLUSMALLINT); break; case SQL_DBMS_NAME:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -