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