1. Fix a bug that SQLGetDiagField(SQL_DIAG_NUMBER) with SQL_HANDLE_DBC returns SQL_NO...
authorHiroshi Inoue <hinoue205@gmail.com>
Sun, 17 Oct 2021 12:29:12 +0000 (21:29 +0900)
committerHiroshi Inoue <hinoue205@gmail.com>
Sun, 21 Nov 2021 22:57:17 +0000 (07:57 +0900)
even if an error record exists.
2. Fix a typo "RECISION"  which should be "PRECISION".

info.c
pgapi30.c

diff --git a/info.c b/info.c
index 2ce1a5acd19052c2525bdd5b2ab02701eb6cba1d..8563a89240730d07e0ccd0f71cd1614c202aa8e3 100644 (file)
--- 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"},
index 07b18e561e322656248ff7b0476b43678c03fdb2..5efeb85193ff990b35ffd058d3d8a11fbeb05d08 100644 (file)
--- 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: