From 277a6c4522d1428f60729cbcacb304b171fe7ab1 Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue Date: Sun, 17 Oct 2021 21:29:12 +0900 Subject: [PATCH] 1. Fix a bug that SQLGetDiagField(SQL_DIAG_NUMBER) with SQL_HANDLE_DBC returns SQL_NO_DATA even if an error record exists. 2. Fix a typo "RECISION" which should be "PRECISION". --- info.c | 2 +- pgapi30.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/info.c b/info.c index 2ce1a5a..8563a89 100644 --- a/info.c +++ b/info.c @@ -1158,7 +1158,7 @@ PGAPI_GetTypeInfo(HSTMT hstmt, static const char *catcn[][2] = { {"TYPE_NAME", "TYPE_NAME"}, {"DATA_TYPE", "DATA_TYPE"}, - {"COLUMN_SIZE", "RECISION"}, + {"COLUMN_SIZE", "PRECISION"}, {"LITERAL_PREFIX", "LITERAL_PREFIX"}, {"LITERAL_SUFFIX", "LITERAL_SUFFIX"}, {"CREATE_PARAMS", "CREATE_PARAMS"}, diff --git a/pgapi30.c b/pgapi30.c index 07b18e5..5efeb85 100644 --- a/pgapi30.c +++ b/pgapi30.c @@ -40,7 +40,7 @@ PGAPI_GetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, { RETCODE ret; - MYLOG(0, "entering type=%d rec=%d\n", HandleType, RecNumber); + MYLOG(0, "entering type=%d rec=%d buffer=%d\n", HandleType, RecNumber, BufferLength); switch (HandleType) { case SQL_HANDLE_ENV: @@ -185,13 +185,20 @@ PGAPI_GetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, 0, NULL, 0); break; case SQL_DIAG_NUMBER: + ret = SQL_NO_DATA_FOUND; + *((SQLINTEGER *) DiagInfoPtr) = 0; rtnctype = SQL_C_LONG; - ret = PGAPI_ConnectError(Handle, RecNumber, - NULL, NULL, NULL, - 0, NULL, 0); + { + SQLCHAR msg[SQL_MAX_MESSAGE_LENGTH + 1]; + ret = PGAPI_ConnectError(Handle, 1, + NULL, NULL, msg, + sizeof(msg), &pcbErrm, 0); + MYLOG(0, "pcbErrm=%d\n", pcbErrm); + } if (SQL_SUCCEEDED(ret)) { - *((SQLINTEGER *) DiagInfoPtr) = 1; + *((SQLINTEGER *) DiagInfoPtr) = (pcbErrm - 1) / SQL_MAX_MESSAGE_LENGTH + 1; + ret = SQL_SUCCESS; } break; case SQL_DIAG_SQLSTATE: -- 2.39.5