1 /*********************************************************************
2 *
3 * unixODBC Cursor Library
4 *
5 * Created by Nick Gorham
6 * (nick@lurcher.org).
7 *
8 * copyright (c) 1999 Nick Gorham
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 *
24 **********************************************************************
25 *
26 * $Id: SQLGetInfo.c,v 1.2 2009/02/18 17:59:17 lurcher Exp $
27 *
28 * $Log: SQLGetInfo.c,v $
29 * Revision 1.2 2009/02/18 17:59:17 lurcher
30 * Shift to using config.h, the compile lines were making it hard to spot warnings
31 *
32 * Revision 1.1.1.1 2001/10/17 16:40:15 lurcher
33 *
34 * First upload to SourceForge
35 *
36 * Revision 1.1.1.1 2000/09/04 16:42:52 nick
37 * Imported Sources
38 *
39 * Revision 1.1 1999/09/19 22:22:50 ngorham
40 *
41 *
42 * Added first cursor library work, read only at the moment and only works
43 * with selects with no where clause
44 *
45 *
46 **********************************************************************/
47
48 #include <config.h>
49 #include "cursorlibrary.h"
50
CLGetInfo(SQLHDBC connection_handle,SQLUSMALLINT info_type,SQLPOINTER info_value,SQLSMALLINT buffer_length,SQLSMALLINT * string_length)51 SQLRETURN CLGetInfo( SQLHDBC connection_handle,
52 SQLUSMALLINT info_type,
53 SQLPOINTER info_value,
54 SQLSMALLINT buffer_length,
55 SQLSMALLINT *string_length )
56 {
57 CLHDBC cl_connection = (CLHDBC) connection_handle;
58 int do_it_here = 1;
59 SQLUINTEGER value;
60 SQLRETURN ret;
61 char *cval = NULL;
62
63 switch( info_type )
64 {
65 case SQL_BOOKMARK_PERSISTENCE:
66 value = 0;
67 break;
68
69 case SQL_DYNAMIC_CURSOR_ATTRIBUTES1:
70 value = 0;
71 break;
72
73 case SQL_DYNAMIC_CURSOR_ATTRIBUTES2:
74 value = 0;
75 break;
76
77 case SQL_FETCH_DIRECTION:
78 value = SQL_FD_FETCH_ABSOLUTE |
79 SQL_FD_FETCH_FIRST |
80 SQL_FD_FETCH_LAST |
81 SQL_FD_FETCH_NEXT |
82 SQL_FD_FETCH_PRIOR |
83 SQL_FD_FETCH_RELATIVE |
84 SQL_FD_FETCH_BOOKMARK;
85 break;
86
87 case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1:
88 value = SQL_CA1_NEXT |
89 SQL_CA1_ABSOLUTE |
90 SQL_CA1_RELATIVE |
91 SQL_CA1_LOCK_NO_CHANGE |
92 SQL_CA1_POS_POSITION |
93 SQL_CA1_POSITIONED_DELETE |
94 SQL_CA1_POSITIONED_UPDATE |
95 SQL_CA1_SELECT_FOR_UPDATE;
96 break;
97
98 case SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2:
99 value = SQL_CA2_READ_ONLY_CONCURRENCY |
100 SQL_CA2_OPT_VALUES_CONCURRENCY |
101 SQL_CA2_SENSITIVITY_UPDATES;
102 break;
103
104 case SQL_KEYSET_CURSOR_ATTRIBUTES1:
105 value = 0;
106 break;
107
108 case SQL_KEYSET_CURSOR_ATTRIBUTES2:
109 value = 0;
110 break;
111
112 case SQL_LOCK_TYPES:
113 value = SQL_LCK_NO_CHANGE;
114 break;
115
116 case SQL_STATIC_CURSOR_ATTRIBUTES1:
117 value = SQL_CA1_NEXT |
118 SQL_CA1_ABSOLUTE |
119 SQL_CA1_RELATIVE |
120 SQL_CA1_BOOKMARK |
121 SQL_CA1_LOCK_NO_CHANGE |
122 SQL_CA1_POS_POSITION |
123 SQL_CA1_POSITIONED_DELETE |
124 SQL_CA1_POSITIONED_UPDATE |
125 SQL_CA1_SELECT_FOR_UPDATE;
126 break;
127
128 case SQL_STATIC_CURSOR_ATTRIBUTES2:
129 value = SQL_CA2_READ_ONLY_CONCURRENCY |
130 SQL_CA2_OPT_VALUES_CONCURRENCY |
131 SQL_CA2_SENSITIVITY_UPDATES;
132
133 break;
134
135 case SQL_POS_OPERATIONS:
136 value = SQL_POS_POSITION;
137 break;
138
139 case SQL_POSITIONED_STATEMENTS:
140 value = SQL_PS_POSITIONED_DELETE |
141 SQL_PS_POSITIONED_UPDATE |
142 SQL_PS_SELECT_FOR_UPDATE;
143 break;
144
145 case SQL_ROW_UPDATES:
146 cval = "Y";
147 break;
148
149 case SQL_SCROLL_CONCURRENCY:
150 value = SQL_SCCO_READ_ONLY |
151 SQL_SCCO_OPT_VALUES;
152 break;
153
154 case SQL_SCROLL_OPTIONS:
155 value = SQL_SO_FORWARD_ONLY |
156 SQL_SO_STATIC;
157 break;
158
159 case SQL_STATIC_SENSITIVITY:
160 value = SQL_SS_UPDATES;
161 break;
162
163 default:
164 do_it_here = 0;
165 break;
166 }
167
168 if ( do_it_here )
169 {
170 if ( cval )
171 {
172 if ( buffer_length > 2 && info_value )
173 {
174 strcpy( info_value, cval );
175 ret = SQL_SUCCESS;
176 }
177 else
178 {
179 ret = SQL_SUCCESS_WITH_INFO;
180 }
181 if ( string_length )
182 {
183 *string_length = 1;
184 }
185 }
186 else
187 {
188 *((SQLINTEGER*)info_value) = value;
189 ret = SQL_SUCCESS;
190 }
191 }
192 else
193 {
194 ret = SQLGETINFO( cl_connection,
195 cl_connection -> driver_dbc,
196 info_type,
197 info_value,
198 buffer_length,
199 string_length );
200
201 if ( SQL_SUCCEEDED( ret ))
202 {
203 if ( info_type == SQL_GETDATA_EXTENSIONS && info_value )
204 {
205 *((SQLINTEGER*)info_value) |= SQL_GD_BLOCK;
206 }
207 }
208 }
209
210 return ret;
211 }
212