Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb6db89a

Browse files
author
Hiroshi Inoue
committed
Separate info30.c from info.c.
1 parentaedc8a9 commitb6db89a

File tree

1 file changed

+351
-0
lines changed

1 file changed

+351
-0
lines changed

‎src/interfaces/odbc/info30.c

Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
/*-------
2+
* Module:info30.c
3+
*
4+
* Description:This module contains routines related to ODBC 3.0
5+
*SQLGetInfo().
6+
*
7+
*/
8+
9+
#ifndefODBCVER
10+
#defineODBCVER 0x0300
11+
#endif
12+
13+
#include"connection.h"
14+
#include"pgapifunc.h"
15+
16+
RETCODESQL_API
17+
PGAPI_GetInfo30(HDBChdbc,UWORDfInfoType,PTRrgbInfoValue,
18+
SWORDcbInfoValueMax,SWORDFAR*pcbInfoValue)
19+
{
20+
staticchar*func="PGAPI_GetInfo30";
21+
ConnectionClass*conn= (ConnectionClass*)hdbc;
22+
char*p=NULL;
23+
intlen=0,
24+
value=0;
25+
RETCODEresult;
26+
27+
switch (fInfoType)
28+
{
29+
caseSQL_DYNAMIC_CURSOR_ATTRIBUTES1:
30+
len=4;
31+
value=0;
32+
break;
33+
caseSQL_DYNAMIC_CURSOR_ATTRIBUTES2:
34+
len=4;
35+
value=0;
36+
break;
37+
38+
caseSQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1:
39+
len=4;
40+
value=SQL_CA1_NEXT |SQL_CA1_ABSOLUTE |
41+
SQL_CA1_RELATIVE |SQL_CA1_BOOKMARK;
42+
break;
43+
caseSQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2:
44+
len=4;
45+
value=0;
46+
break;
47+
caseSQL_KEYSET_CURSOR_ATTRIBUTES1:
48+
len=4;
49+
value=SQL_CA1_NEXT |SQL_CA1_ABSOLUTE
50+
|SQL_CA1_RELATIVE |SQL_CA1_BOOKMARK
51+
|SQL_CA1_LOCK_NO_CHANGE |SQL_CA1_POS_POSITION
52+
|SQL_CA1_POS_UPDATE |SQL_CA1_POS_DELETE
53+
|SQL_CA1_POS_REFRESH
54+
/* | SQL_CA1_BULK_ADD
55+
| SQL_CA1_BULK_UPDATE_BY_BOOKMARK
56+
| SQL_CA1_BULK_DELETE_BY_BOOKMARK
57+
| SQL_CA1_BULK_FETCH_BY_BOOKMARK */
58+
;
59+
break;
60+
caseSQL_KEYSET_CURSOR_ATTRIBUTES2:
61+
len=4;
62+
value=SQL_CA2_OPT_ROWVER_CONCURRENCY |
63+
SQL_CA2_SENSITIVITY_ADDITIONS |
64+
SQL_CA2_SENSITIVITY_DELETIONS |
65+
SQL_CA2_SENSITIVITY_UPDATES;
66+
break;
67+
68+
caseSQL_STATIC_CURSOR_ATTRIBUTES1:
69+
len=4;
70+
value=SQL_CA1_NEXT |SQL_CA1_ABSOLUTE |
71+
SQL_CA1_RELATIVE |SQL_CA1_BOOKMARK |
72+
SQL_CA1_LOCK_NO_CHANGE |SQL_CA1_POS_POSITION |
73+
SQL_CA1_POS_UPDATE |SQL_CA1_POS_DELETE |
74+
SQL_CA1_POS_REFRESH;
75+
break;
76+
caseSQL_STATIC_CURSOR_ATTRIBUTES2:
77+
len=4;
78+
value=SQL_CA2_OPT_ROWVER_CONCURRENCY |
79+
SQL_CA2_SENSITIVITY_ADDITIONS |
80+
SQL_CA2_SENSITIVITY_DELETIONS |
81+
SQL_CA2_SENSITIVITY_UPDATES;
82+
break;
83+
84+
caseSQL_ODBC_INTERFACE_CONFORMANCE:
85+
len=4;
86+
value=SQL_OIC_CORE;
87+
break;
88+
caseSQL_ACTIVE_ENVIRONMENTS:
89+
len=2;
90+
value=0;
91+
break;
92+
caseSQL_AGGREGATE_FUNCTIONS:
93+
len=4;
94+
value=SQL_AF_ALL;
95+
break;
96+
caseSQL_ALTER_DOMAIN:
97+
len=4;
98+
value=0;
99+
break;
100+
caseSQL_ASYNC_MODE:
101+
len=4;
102+
value=SQL_AM_NONE;
103+
break;
104+
caseSQL_BATCH_ROW_COUNT:
105+
len=4;
106+
value=SQL_BRC_ROLLED_UP |SQL_BRC_EXPLICIT;
107+
break;
108+
caseSQL_BATCH_SUPPORT:
109+
len=4;
110+
value=SQL_BS_ROW_COUNT_EXPLICIT;
111+
break;
112+
caseSQL_CATALOG_NAME:
113+
len=0;
114+
if (PG_VERSION_LE(conn,7.2))
115+
p="N";
116+
else
117+
p="Y";/* hopefully */
118+
break;
119+
caseSQL_COLLATION_SEQ:
120+
len=0;
121+
p="";
122+
break;
123+
caseSQL_CREATE_ASSERTION:
124+
len=4;
125+
value=0;
126+
break;
127+
caseSQL_CREATE_CHARACTER_SET:
128+
len=4;
129+
value=0;
130+
break;
131+
caseSQL_CREATE_COLLATION:
132+
len=4;
133+
value=0;
134+
break;
135+
caseSQL_CREATE_DOMAIN:
136+
len=4;
137+
value=0;
138+
break;
139+
caseSQL_CREATE_SCHEMA:
140+
len=4;
141+
if (PG_VERSION_LE(conn,7.2))
142+
value=0;
143+
else
144+
value=SQL_CS_CREATE_SCHEMA |SQL_CS_AUTHORIZATION;/* hopefully */
145+
break;
146+
caseSQL_CREATE_TABLE:
147+
len=4;
148+
value=SQL_CT_CREATE_TABLE |SQL_CT_TABLE_CONSTRAINT
149+
|SQL_CT_CONSTRAINT_NAME_DEFINITION
150+
|SQL_CT_LOCAL_TEMPORARY |SQL_CT_COLUMN_CONSTRAINT
151+
|SQL_CT_COLUMN_DEFAULT |SQL_CT_CONSTRAINT_INITIALLY_DEFERRED
152+
|SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE |SQL_CT_CONSTRAINT_DEFERRABLE;
153+
break;
154+
caseSQL_CREATE_TRANSLATION:
155+
len=4;
156+
value=0;
157+
break;
158+
caseSQL_CREATE_VIEW:
159+
len=4;
160+
value=SQL_CV_CREATE_VIEW;
161+
break;
162+
caseSQL_DDL_INDEX:
163+
len=4;
164+
value=SQL_DI_CREATE_INDEX |SQL_DI_DROP_INDEX;
165+
break;
166+
caseSQL_DESCRIBE_PARAMETER:
167+
len=0;
168+
p="N";
169+
break;
170+
caseSQL_DROP_ASSERTION:
171+
len=4;
172+
value=0;
173+
break;
174+
caseSQL_DROP_CHARACTER_SET:
175+
len=4;
176+
value=0;
177+
break;
178+
caseSQL_DROP_COLLATION:
179+
len=4;
180+
value=0;
181+
break;
182+
caseSQL_DROP_DOMAIN:
183+
len=4;
184+
value=0;
185+
break;
186+
caseSQL_DROP_SCHEMA:
187+
len=4;
188+
if (PG_VERSION_LE(conn,7.2))
189+
value=0;
190+
else
191+
value=SQL_DS_DROP_SCHEMA |SQL_DS_RESTRICT |SQL_DS_CASCADE;/* hopefully */
192+
break;
193+
caseSQL_DROP_TABLE:
194+
len=4;
195+
value=SQL_DT_DROP_TABLE;
196+
if (PG_VERSION_GT(conn,7.2))/* hopefully */
197+
value |=SQL_DT_RESTRICT |SQL_DT_CASCADE;
198+
break;
199+
caseSQL_DROP_TRANSLATION:
200+
len=4;
201+
value=0;
202+
break;
203+
caseSQL_DROP_VIEW:
204+
len=4;
205+
value=SQL_DV_DROP_VIEW;
206+
if (PG_VERSION_GT(conn,7.2))/* hopefully */
207+
value |=SQL_DV_RESTRICT |SQL_DV_CASCADE;
208+
break;
209+
caseSQL_INDEX_KEYWORDS:
210+
len=4;
211+
value=SQL_IK_NONE;
212+
caseSQL_INFO_SCHEMA_VIEWS:
213+
len=4;
214+
value=0;
215+
break;
216+
caseSQL_INSERT_STATEMENT:
217+
len=4;
218+
value=SQL_IS_INSERT_LITERALS |SQL_IS_INSERT_SEARCHED |SQL_IS_SELECT_INTO;
219+
break;
220+
caseSQL_MAX_IDENTIFIER_LEN:
221+
len=4;
222+
value=32;
223+
break;
224+
caseSQL_MAX_ROW_SIZE_INCLUDES_LONG:
225+
len=0;
226+
p="Y";
227+
break;
228+
caseSQL_PARAM_ARRAY_ROW_COUNTS:
229+
len=4;
230+
value=SQL_PARC_NO_BATCH;
231+
break;
232+
caseSQL_PARAM_ARRAY_SELECTS:
233+
len=4;
234+
value=SQL_PAS_NO_SELECT;
235+
break;
236+
caseSQL_SQL_CONFORMANCE:
237+
len=4;
238+
value=SQL_SC_SQL92_ENTRY;
239+
break;
240+
caseSQL_SQL92_DATETIME_FUNCTIONS:
241+
len=4;
242+
value=SQL_SDF_CURRENT_DATE |SQL_SDF_CURRENT_TIME |SQL_SDF_CURRENT_TIMESTAMP;
243+
break;
244+
caseSQL_SQL92_FOREIGN_KEY_DELETE_RULE:
245+
len=4;
246+
value=SQL_SFKD_CASCADE |SQL_SFKD_NO_ACTION |SQL_SFKD_SET_DEFAULT |SQL_SFKD_SET_NULL;
247+
break;
248+
caseSQL_SQL92_FOREIGN_KEY_UPDATE_RULE:
249+
len=4;
250+
value=SQL_SFKU_CASCADE |SQL_SFKU_NO_ACTION |SQL_SFKU_SET_DEFAULT |SQL_SFKU_SET_NULL;
251+
break;
252+
caseSQL_SQL92_GRANT:
253+
len=4;
254+
value=SQL_SG_DELETE_TABLE |SQL_SG_INSERT_TABLE |SQL_SG_REFERENCES_TABLE |SQL_SG_SELECT_TABLE |SQL_SG_UPDATE_TABLE;
255+
break;
256+
caseSQL_SQL92_NUMERIC_VALUE_FUNCTIONS:
257+
len=4;
258+
value=SQL_SNVF_BIT_LENGTH |SQL_SNVF_CHAR_LENGTH
259+
|SQL_SNVF_CHARACTER_LENGTH |SQL_SNVF_EXTRACT
260+
|SQL_SNVF_OCTET_LENGTH |SQL_SNVF_POSITION;
261+
break;
262+
caseSQL_SQL92_PREDICATES:
263+
len=4;
264+
value=SQL_SP_BETWEEN |SQL_SP_COMPARISON
265+
|SQL_SP_EXISTS |SQL_SP_IN
266+
|SQL_SP_ISNOTNULL |SQL_SP_ISNULL
267+
|SQL_SP_LIKE |SQL_SP_OVERLAPS
268+
|SQL_SP_QUANTIFIED_COMPARISON;
269+
break;
270+
caseSQL_SQL92_RELATIONAL_JOIN_OPERATORS:
271+
len=4;
272+
if (PG_VERSION_GE(conn,7.1))
273+
value=SQL_SRJO_CROSS_JOIN |SQL_SRJO_EXCEPT_JOIN
274+
|SQL_SRJO_FULL_OUTER_JOIN |SQL_SRJO_INNER_JOIN
275+
|SQL_SRJO_INTERSECT_JOIN |SQL_SRJO_LEFT_OUTER_JOIN
276+
|SQL_SRJO_NATURAL_JOIN |SQL_SRJO_RIGHT_OUTER_JOIN
277+
|SQL_SRJO_UNION_JOIN;
278+
break;
279+
caseSQL_SQL92_REVOKE:
280+
len=4;
281+
value=SQL_SR_DELETE_TABLE |SQL_SR_INSERT_TABLE |SQL_SR_REFERENCES_TABLE |SQL_SR_SELECT_TABLE |SQL_SR_UPDATE_TABLE;
282+
break;
283+
caseSQL_SQL92_ROW_VALUE_CONSTRUCTOR:
284+
len=4;
285+
value=SQL_SRVC_VALUE_EXPRESSION |SQL_SRVC_NULL;
286+
break;
287+
caseSQL_SQL92_STRING_FUNCTIONS:
288+
len=4;
289+
value=SQL_SSF_CONVERT |SQL_SSF_LOWER
290+
|SQL_SSF_UPPER |SQL_SSF_SUBSTRING
291+
|SQL_SSF_TRANSLATE |SQL_SSF_TRIM_BOTH
292+
|SQL_SSF_TRIM_LEADING |SQL_SSF_TRIM_TRAILING;
293+
break;
294+
caseSQL_SQL92_VALUE_EXPRESSIONS:
295+
len=4;
296+
value=SQL_SVE_CASE |SQL_SVE_CAST |SQL_SVE_COALESCE |SQL_SVE_NULLIF;
297+
break;
298+
/* The followings aren't implemented yet */
299+
caseSQL_DATETIME_LITERALS:
300+
len=4;
301+
caseSQL_DM_VER:
302+
len=0;
303+
caseSQL_DRIVER_HDESC:
304+
len=4;
305+
caseSQL_MAX_ASYNC_CONCURRENT_STATEMENTS:
306+
len=4;
307+
caseSQL_STANDARD_CLI_CONFORMANCE:
308+
len=4;
309+
caseSQL_XOPEN_CLI_YEAR:
310+
len=0;
311+
default:
312+
/* unrecognized key */
313+
conn->errormsg="Unrecognized key passed to SQLGetInfo30.";
314+
conn->errornumber=CONN_NOT_IMPLEMENTED_ERROR;
315+
CC_log_error(func,"",conn);
316+
returnSQL_ERROR;
317+
}
318+
result=SQL_SUCCESS;
319+
if (p)
320+
{
321+
/* char/binary data */
322+
len=strlen(p);
323+
324+
if (rgbInfoValue)
325+
{
326+
strncpy_null((char*)rgbInfoValue,p, (size_t)cbInfoValueMax);
327+
328+
if (len >=cbInfoValueMax)
329+
{
330+
result=SQL_SUCCESS_WITH_INFO;
331+
conn->errornumber=CONN_TRUNCATED;
332+
conn->errormsg="The buffer was too small for tthe InfoValue.";
333+
}
334+
}
335+
}
336+
else
337+
{
338+
/* numeric data */
339+
if (rgbInfoValue)
340+
{
341+
if (len==2)
342+
*((WORD*)rgbInfoValue)= (WORD)value;
343+
elseif (len==4)
344+
*((DWORD*)rgbInfoValue)= (DWORD)value;
345+
}
346+
}
347+
348+
if (pcbInfoValue)
349+
*pcbInfoValue=len;
350+
returnresult;
351+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp