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

Commit9f990a7

Browse files
author
Hiroshi Inoue
committed
1) Not export ODBC 3.0 functions.
2) (Maybe) fix a bug reported by Mika Muntila.
1 parentf93449e commit9f990a7

File tree

6 files changed

+58
-29
lines changed

6 files changed

+58
-29
lines changed

‎src/interfaces/odbc/convert.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,12 +1674,19 @@ copy_statement_with_parameters(StatementClass *stmt)
16741674

16751675
if (buf)
16761676
{
1677-
CVT_APPEND_DATA(buf,used);
1677+
switch (used)
1678+
{
1679+
caseSQL_NULL_DATA:
1680+
break;
1681+
caseSQL_NTS:
1682+
CVT_APPEND_STR(buf);
1683+
break;
1684+
default:
1685+
CVT_APPEND_DATA(buf,used);
1686+
}
16781687
}
16791688
else
1680-
{
16811689
CVT_APPEND_STR(param_string);
1682-
}
16831690

16841691
if (param_sqltype==SQL_BIT)
16851692
CVT_APPEND_CHAR('\'');/* Close Quote */

‎src/interfaces/odbc/drvconn.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ PGAPI_DriverConnect(
230230

231231
if (len >=cbConnStrOutMax)
232232
{
233+
intclen;
234+
for (clen=strlen(szConnStrOut)-1;clen >=0&&szConnStrOut[clen]!=';';clen--)
235+
szConnStrOut[clen]='\0';
233236
result=SQL_SUCCESS_WITH_INFO;
234237
conn->errornumber=CONN_TRUNCATED;
235238
conn->errormsg="The buffer was too small for the ConnStrOut.";

‎src/interfaces/odbc/environ.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ PGAPI_Error(
9292
{
9393
char*msg;
9494
intstatus;
95+
BOOLonce_again= FALSE;
96+
SWORDmsglen;
9597

9698
mylog("**** PGAPI_Error: henv=%u, hdbc=%u, hstmt=%u <%d>\n",henv,hdbc,hstmt,cbErrorMsgMax);
9799

@@ -101,8 +103,6 @@ PGAPI_Error(
101103
{
102104
/* CC: return an error of a hstmt */
103105
StatementClass*stmt= (StatementClass*)hstmt;
104-
SWORDmsglen;
105-
BOOLonce_again= FALSE;
106106

107107
if (SC_get_error(stmt,&status,&msg))
108108
{
@@ -306,8 +306,15 @@ PGAPI_Error(
306306
returnSQL_NO_DATA_FOUND;
307307
}
308308

309+
msglen=strlen(msg);
309310
if (NULL!=pcbErrorMsg)
310-
*pcbErrorMsg= (SWORD)strlen(msg);
311+
{
312+
*pcbErrorMsg=msglen;
313+
if (cbErrorMsgMax==0)
314+
once_again= TRUE;
315+
elseif (msglen >=cbErrorMsgMax)
316+
*pcbErrorMsg=cbErrorMsgMax-1;
317+
}
311318
if ((NULL!=szErrorMsg)&& (cbErrorMsgMax>0))
312319
strncpy_null(szErrorMsg,msg,cbErrorMsgMax);
313320
if (NULL!=pfNativeError)
@@ -391,7 +398,13 @@ PGAPI_Error(
391398
returnSQL_NO_DATA_FOUND;
392399
}
393400

394-
returnSQL_SUCCESS;
401+
if (once_again)
402+
{
403+
conn->errornumber=status;
404+
returnSQL_SUCCESS_WITH_INFO;
405+
}
406+
else
407+
returnSQL_SUCCESS;
395408
}
396409
elseif (SQL_NULL_HENV!=henv)
397410
{

‎src/interfaces/odbc/info.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3614,9 +3614,29 @@ PGAPI_Procedures(
36143614
SWORDcbProcName)
36153615
{
36163616
staticchar*func="PGAPI_Procedures";
3617+
StatementClass*stmt= (StatementClass*)hstmt;
3618+
Int2result_cols;
36173619

36183620
mylog("%s: entering...\n",func);
36193621

3622+
/*
3623+
* a statement is actually executed, so we'll have to do this
3624+
* ourselves.
3625+
*/
3626+
result_cols=8;
3627+
extend_bindings(stmt,result_cols);
3628+
3629+
/* set the field names */
3630+
QR_set_num_fields(stmt->result,result_cols);
3631+
QR_set_field_info(stmt->result,0,"PROCEDURE_CAT",PG_TYPE_TEXT,MAX_INFO_STRING);
3632+
QR_set_field_info(stmt->result,1,"PROCEDURE_SCHEM",PG_TYPE_TEXT,MAX_INFO_STRING);
3633+
QR_set_field_info(stmt->result,2,"PROCEDURE_NAME",PG_TYPE_TEXT,MAX_INFO_STRING);
3634+
QR_set_field_info(stmt->result,3,"NUM_INPUT_PARAMS",PG_TYPE_TEXT,MAX_INFO_STRING);
3635+
QR_set_field_info(stmt->result,4,"NUM_OUTPUT_PARAMS",PG_TYPE_TEXT,MAX_INFO_STRING);
3636+
QR_set_field_info(stmt->result,5,"NUM_RESULT_SET",PG_TYPE_TEXT,MAX_INFO_STRING);
3637+
QR_set_field_info(stmt->result,6,"REMARKS",PG_TYPE_TEXT,MAX_INFO_STRING);
3638+
QR_set_field_info(stmt->result,7,"PROCEDURE_TYPE",PG_TYPE_INT2,2);
3639+
36203640
SC_log_error(func,"Function not implemented", (StatementClass*)hstmt);
36213641
returnSQL_ERROR;
36223642
}

‎src/interfaces/odbc/pgtypes.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,15 @@ pgtype_length(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_
698698
/* Character types (and NUMERIC) use the default precision */
699699
casePG_TYPE_VARCHAR:
700700
casePG_TYPE_BPCHAR:
701+
#ifdefMULTIBYTE
702+
/* after 7.2 */
703+
if (PG_VERSION_GE(SC_get_conn(stmt),7.2)
704+
return3*pgtype_precision(stmt,type,col,handle_unknown_size_as);
705+
else
706+
#else
707+
/* CR -> CR/LF */
701708
return2*pgtype_precision(stmt,type,col,handle_unknown_size_as);
709+
#endif/* MULTIBYTE */
702710
default:
703711
returnpgtype_precision(stmt,type,col,handle_unknown_size_as);
704712
}

‎src/interfaces/odbc/psqlodbc_win32.def

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,28 +53,6 @@ SQLSetPos @68
5353
SQLSetScrollOptions @69
5454
SQLTablePrivileges @70
5555
SQLBindParameter @72
56-
57-
SQLAllocHandle @80
58-
SQLBindParam @81
59-
SQLCloseCursor @82
60-
SQLColAttribute @83
61-
SQLCopyDesc @84
62-
SQLEndTran @85
63-
SQLFetchScroll @86
64-
SQLFreeHandle @87
65-
SQLGetDescField @88
66-
SQLGetDescRec @89
67-
SQLGetDiagField @90
68-
SQLGetDiagRec @91
69-
SQLGetEnvAttr @92
70-
SQLGetConnectAttr @93
71-
SQLGetStmtAttr @94
72-
SQLSetConnectAttr @95
73-
SQLSetDescField @96
74-
SQLSetDescRec @97
75-
SQLSetEnvAttr @98
76-
SQLSetStmtAttr @99
77-
7856
SQLDummyOrdinal @199
7957
dconn_FDriverConnectProc @200
8058
DllMain @201

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp