Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 9f990a7

Browse files
author
Hiroshi Inoue
committed
1) Not export ODBC 3.0 functions.
2) (Maybe) fix a bug reported by Mika Muntila.
1 parent f93449e commit 9f990a7

File tree

6 files changed

+58
-29
lines changed

6 files changed

+58
-29
lines changed

src/interfaces/odbc/convert.c

+10-3
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+
case SQL_NULL_DATA:
1680+
break;
1681+
case SQL_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

+3
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ PGAPI_DriverConnect(
230230

231231
if (len >= cbConnStrOutMax)
232232
{
233+
int clen;
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

+17-4
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ PGAPI_Error(
9292
{
9393
char *msg;
9494
int status;
95+
BOOL once_again = FALSE;
96+
SWORD msglen;
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-
SWORD msglen;
105-
BOOL once_again = FALSE;
106106

107107
if (SC_get_error(stmt, &status, &msg))
108108
{
@@ -306,8 +306,15 @@ PGAPI_Error(
306306
return SQL_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+
else if (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
return SQL_NO_DATA_FOUND;
392399
}
393400

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

src/interfaces/odbc/info.c

+20
Original file line numberDiff line numberDiff line change
@@ -3614,9 +3614,29 @@ PGAPI_Procedures(
36143614
SWORD cbProcName)
36153615
{
36163616
static char *func = "PGAPI_Procedures";
3617+
StatementClass *stmt = (StatementClass *) hstmt;
3618+
Int2 result_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
return SQL_ERROR;
36223642
}

src/interfaces/odbc/pgtypes.c

+8
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
case PG_TYPE_VARCHAR:
700700
case PG_TYPE_BPCHAR:
701+
#ifdef MULTIBYTE
702+
/* after 7.2 */
703+
if (PG_VERSION_GE(SC_get_conn(stmt), 7.2)
704+
return 3 * pgtype_precision(stmt, type, col, handle_unknown_size_as);
705+
else
706+
#else
707+
/* CR -> CR/LF */
701708
return 2 * pgtype_precision(stmt, type, col, handle_unknown_size_as);
709+
#endif /* MULTIBYTE */
702710
default:
703711
return pgtype_precision(stmt, type, col, handle_unknown_size_as);
704712
}

src/interfaces/odbc/psqlodbc_win32.def

-22
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)