1 /* 2 * henv.h 3 * 4 * $Id: henv.h 2613 1999-06-01 15:32:12Z VZ $ 5 * 6 * Environment object management functions 7 * 8 * The iODBC driver manager. 9 * 10 * Copyright (C) 1995 by Ke Jin <kejin@empress.com> 11 * 12 * This library is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU Library General Public 14 * License as published by the Free Software Foundation; either 15 * version 2 of the License, or (at your option) any later version. 16 * 17 * This library is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * Library General Public License for more details. 21 * 22 * You should have received a copy of the GNU Library General Public 23 * License along with this library; if not, write to the Free 24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 25 */ 26 #ifndef _HENV_H 27 #define _HENV_H 28 29 #include "config.h" 30 #include "dlproc.h" 31 32 #include "isql.h" 33 #include "isqlext.h" 34 35 #ifndef SYSERR 36 #define SYSERR -1 37 #endif 38 39 enum 40 { 41 42 #if (ODBCVER >= 0x0300) 43 en_AllocHandle = SQL_API_SQLALLOCHANDLE, 44 en_FreeHandle = SQL_API_SQLFREEHANDLE, 45 #endif 46 47 en_AllocEnv = SQL_API_SQLALLOCENV, 48 en_AllocConnect = SQL_API_SQLALLOCCONNECT, 49 en_Connect = SQL_API_SQLCONNECT, 50 en_DriverConnect = SQL_API_SQLDRIVERCONNECT, 51 en_BrowseConnect = SQL_API_SQLBROWSECONNECT, 52 53 en_DataSources = SQL_API_SQLDATASOURCES, 54 en_Drivers = SQL_API_SQLDRIVERS, 55 en_GetInfo = SQL_API_SQLGETINFO, 56 en_GetFunctions = SQL_API_SQLGETFUNCTIONS, 57 en_GetTypeInfo = SQL_API_SQLGETTYPEINFO, 58 59 en_SetConnectOption = SQL_API_SQLSETCONNECTOPTION, 60 en_GetConnectOption = SQL_API_SQLGETCONNECTOPTION, 61 en_SetStmtOption = SQL_API_SQLSETSTMTOPTION, 62 en_GetStmtOption = SQL_API_SQLGETSTMTOPTION, 63 64 en_AllocStmt = SQL_API_SQLALLOCSTMT, 65 en_Prepare = SQL_API_SQLPREPARE, 66 en_BindParameter = SQL_API_SQLBINDPARAMETER, 67 en_ParamOptions = SQL_API_SQLPARAMOPTIONS, 68 en_GetCursorName = SQL_API_SQLGETCURSORNAME, 69 en_SetCursorName = SQL_API_SQLSETCURSORNAME, 70 en_SetScrollOptions = SQL_API_SQLSETSCROLLOPTIONS, 71 en_SetParam = SQL_API_SQLSETPARAM, 72 73 en_Execute = SQL_API_SQLEXECUTE, 74 en_ExecDirect = SQL_API_SQLEXECDIRECT, 75 en_NativeSql = SQL_API_SQLNATIVESQL, 76 en_DescribeParam = SQL_API_SQLDESCRIBEPARAM, 77 en_NumParams = SQL_API_SQLNUMPARAMS, 78 en_ParamData = SQL_API_SQLPARAMDATA, 79 en_PutData = SQL_API_SQLPUTDATA, 80 81 en_RowCount = SQL_API_SQLROWCOUNT, 82 en_NumResultCols = SQL_API_SQLNUMRESULTCOLS, 83 en_DescribeCol = SQL_API_SQLDESCRIBECOL, 84 en_ColAttributes = SQL_API_SQLCOLATTRIBUTES, 85 en_BindCol = SQL_API_SQLBINDCOL, 86 en_Fetch = SQL_API_SQLFETCH, 87 en_ExtendedFetch = SQL_API_SQLEXTENDEDFETCH, 88 en_GetData = SQL_API_SQLGETDATA, 89 en_SetPos = SQL_API_SQLSETPOS, 90 en_MoreResults = SQL_API_SQLMORERESULTS, 91 en_Error = SQL_API_SQLERROR, 92 93 en_ColumnPrivileges = SQL_API_SQLCOLUMNPRIVILEGES, 94 en_Columns = SQL_API_SQLCOLUMNS, 95 en_ForeignKeys = SQL_API_SQLFOREIGNKEYS, 96 en_PrimaryKeys = SQL_API_SQLPRIMARYKEYS, 97 en_ProcedureColumns = SQL_API_SQLPROCEDURECOLUMNS, 98 en_Procedures = SQL_API_SQLPROCEDURES, 99 en_SpecialColumns = SQL_API_SQLSPECIALCOLUMNS, 100 en_Statistics = SQL_API_SQLSTATISTICS, 101 en_TablePrivileges = SQL_API_SQLTABLEPRIVILEGES, 102 en_Tables = SQL_API_SQLTABLES, 103 104 en_FreeStmt = SQL_API_SQLFREESTMT, 105 en_Cancel = SQL_API_SQLCANCEL, 106 en_Transact = SQL_API_SQLTRANSACT, 107 108 en_Disconnect = SQL_API_SQLDISCONNECT, 109 en_FreeConnect = SQL_API_SQLFREECONNECT, 110 en_FreeEnv = SQL_API_SQLFREEENV, 111 112 en_NullProc = SYSERR 113 }; 114 115 typedef struct 116 { 117 int type; /* must be 1st field */ 118 119 HENV henv; /* driver's env list */ 120 HDBC hdbc; /* driver's dbc list */ 121 HERR herr; /* err list */ 122 int state; 123 } 124 GENV_t; 125 126 typedef struct 127 { 128 HENV next; /* next attached env handle */ 129 int refcount; /* Driver's bookkeeping reference count */ 130 HPROC dllproc_tab[SQL_EXT_API_LAST + 1]; /* driver api calls */ 131 132 HENV dhenv; /* driver env handle */ 133 HDLL hdll; /* drvier share library handle */ 134 } 135 ENV_t; 136 137 /* Note: 138 139 * - ODBC applications only know about global environment handle, 140 * a void pointer points to a GENV_t object. There is only one 141 * this object per process(however, to make the library reentrant, 142 * we still keep this object on heap). Applications only know 143 * address of this object and needn't care about its detail. 144 * 145 * - ODBC driver manager knows about instance environment handles, 146 * void pointers point to ENV_t objects. There are maybe more 147 * than one this kind of objects per process. However, multiple 148 * connections to a same data source(i.e. call same share library) 149 * will share one instance environment object. 150 * 151 * - ODBC drvier manager knows about their own environemnt handle, 152 * a void pointer point to a driver defined object. Every driver 153 * keeps one of its own environment object and driver manager 154 * keeps address of it by the 'dhenv' field in the instance 155 * environment object without care about its detail. 156 * 157 * - Applications can get driver's environment object handle by 158 * SQLGetInfo() with fInfoType equals to SQL_DRIVER_HENV 159 */ 160 #endif 161