1/* 2 * hdesc.h 3 * 4 * $Id: hdesc.h,v 1.9 2006/01/20 15:58:34 source Exp $ 5 * 6 * Descriptor object 7 * 8 * The iODBC driver manager. 9 * 10 * Copyright (C) 1995 by Ke Jin <kejin@empress.com> 11 * Copyright (C) 1996-2006 by OpenLink Software <iodbc@openlinksw.com> 12 * All Rights Reserved. 13 * 14 * This software is released under the terms of either of the following 15 * licenses: 16 * 17 * - GNU Library General Public License (see LICENSE.LGPL) 18 * - The BSD License (see LICENSE.BSD). 19 * 20 * Note that the only valid version of the LGPL license as far as this 21 * project is concerned is the original GNU Library General Public License 22 * Version 2, dated June 1991. 23 * 24 * While not mandated by the BSD license, any patches you make to the 25 * iODBC source code may be contributed back into the iODBC project 26 * at your discretion. Contributions will benefit the Open Source and 27 * Data Access community as a whole. Submissions may be made at: 28 * 29 * http://www.iodbc.org 30 * 31 * 32 * GNU Library Generic Public License Version 2 33 * ============================================ 34 * This library is free software; you can redistribute it and/or 35 * modify it under the terms of the GNU Library General Public 36 * License as published by the Free Software Foundation; only 37 * Version 2 of the License dated June 1991. 38 * 39 * This library is distributed in the hope that it will be useful, 40 * but WITHOUT ANY WARRANTY; without even the implied warranty of 41 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 42 * Library General Public License for more details. 43 * 44 * You should have received a copy of the GNU Library General Public 45 * License along with this library; if not, write to the Free 46 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 47 * 48 * 49 * The BSD License 50 * =============== 51 * Redistribution and use in source and binary forms, with or without 52 * modification, are permitted provided that the following conditions 53 * are met: 54 * 55 * 1. Redistributions of source code must retain the above copyright 56 * notice, this list of conditions and the following disclaimer. 57 * 2. Redistributions in binary form must reproduce the above copyright 58 * notice, this list of conditions and the following disclaimer in 59 * the documentation and/or other materials provided with the 60 * distribution. 61 * 3. Neither the name of OpenLink Software Inc. nor the names of its 62 * contributors may be used to endorse or promote products derived 63 * from this software without specific prior written permission. 64 * 65 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 66 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 67 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 68 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR 69 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 70 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 71 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 72 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 73 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 74 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 75 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 76 */ 77 78 79#ifndef __DESC_H 80#define __DESC_H 81 82#define APP_ROW_DESC 0 83#define APP_PARAM_DESC 1 84#define IMP_ROW_DESC 2 85#define IMP_PARAM_DESC 3 86 87typedef struct DESC_s { 88 89 int type; 90 HERR herr; /* list of descriptor errors */ 91 SQLRETURN rc; 92 93 struct DESC_s *next; 94 95 SQLHDBC hdbc; /* connection associated with the descriptor */ 96 SQLHDESC dhdesc; /* the driver's desc handle */ 97 HSTMT hstmt; /* if not null - the descriptor is implicit to that statement */ 98 99 SWORD desc_cip; /* Call in Progess flag */ 100 101 SQLSMALLINT err_rec; 102} DESC_t; 103 104#ifndef HDESC 105#define HDESC SQLHDESC 106#endif 107 108 109#define IS_VALID_HDESC(x) \ 110 ((x) != SQL_NULL_HDESC && \ 111 ((DESC_t *)(x))->type == SQL_HANDLE_DESC && \ 112 ((DESC_t *)(x))->hdbc != SQL_NULL_HDBC) 113 114 115#define ENTER_DESC(hdesc, trace) \ 116 DESC (pdesc, hdesc); \ 117 SQLRETURN retcode = SQL_SUCCESS; \ 118 ODBC_LOCK();\ 119 TRACE(trace); \ 120 if (!IS_VALID_HDESC (pdesc)) \ 121 { \ 122 retcode = SQL_INVALID_HANDLE; \ 123 goto done; \ 124 } \ 125 else if (pdesc->desc_cip) \ 126 { \ 127 PUSHSQLERR (pdesc->herr, en_S1010); \ 128 retcode = SQL_ERROR; \ 129 goto done; \ 130 } \ 131 pdesc->desc_cip = 1; \ 132 CLEAR_ERRORS (pdesc); \ 133 ODBC_UNLOCK() 134 135 136#define LEAVE_DESC(hdesc, trace) \ 137 ODBC_LOCK (); \ 138 done: \ 139 TRACE(trace); \ 140 pdesc->desc_cip = 0; \ 141 ODBC_UNLOCK (); \ 142 return (retcode) 143 144#endif /* __DESC_H */ 145