Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mYhRM-0003Pp-Ev for pgsql-odbc@arkaria.postgresql.org; Fri, 08 Oct 2021 04:25:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mYhRJ-0000g5-Oc for pgsql-odbc@arkaria.postgresql.org; Fri, 08 Oct 2021 04:24:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mYGFL-0003VL-0b for pgsql-odbc@lists.postgresql.org; Wed, 06 Oct 2021 23:22:47 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1mYGFH-0003mq-Tb for pgsql-odbc@lists.postgresql.org; Wed, 06 Oct 2021 23:22:46 +0000 Received: by mail-ed1-x530.google.com with SMTP id d8so15810328edx.9 for ; Wed, 06 Oct 2021 16:22:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=7T4uZSc1BN2jjmGgKsRHtBTa0loucu0QfA4S4i2l1T8=; b=i+ERV0HbV35RfhigPJi4QHjBfMbIN8p8cJkeoIBbnBasiN7u1kE7Xnf/X0EmZ8/wLC t99UTFbmXjAlxra2TG6sQVPCoK5eB75lcwzPk63dm2/HkkE02yyZOU8koZKBzplnATaW M0uD8oM6HtAz9dre+sOq6VH5INoplQWZGclLGtphNYOV01gs+hva9s+Yc+en3hI3o075 P7n2zjxRVhJnMHX1R2HIaUbh59bs0aGMNmv3VPE76dN7N65RVRiSRekrtPOIQH/gKANr SJQw8AwMRGYKamRq4HF49mcLFKkaydHuiQ5W4G3qxCXNQDOdGp/djZdiLx4EsbzlRN55 MpNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=7T4uZSc1BN2jjmGgKsRHtBTa0loucu0QfA4S4i2l1T8=; b=asDpTiMqnwNR/FI9JL5xjj3FgQkgncagrTRIaBXSlULBmNrSfZrGFUWs1D8SsTlcOV r0pqj9a36fWmmQaIx+uUVH8KnP7VyLVX36glX+n1A7jkquvU73idXNUIaQzx5OsfyRXm pubwfwgwn+KySoBPB0mMGP4IGZ6ZNKVsHrZ2GiuuE2Ivs6vNIQONgfiebA7kxx59uI7T 93rVMfKp1eAfFdbggKJy1xQHmuf+L0Iw2TPT/KxEmFwZjVDIySZvtTNBFmNHUx1nakrx 4M5Sv/Zsrzw0OntNWz+9PAO2Nxklac1yeGMaMkmsofcpNSp9Cc+iCAwEMSNotdUHlJeD D2SA== X-Gm-Message-State: AOAM532sYt0zBFXBzu7ly3pNY6LYIpaz+t7sRzQsv7xRx9xl5UtLnAz1 zWf2WO7ChYUodam2QhNVsvC4xaHADzBYcNCn+Hbit7iYgkstWw== X-Google-Smtp-Source: ABdhPJyFBg9g/nNubRY37jHXGhahZCKwj6wotk+BwW4G0p9Nm1FnlfCpMv70M752cjxmnCa5O1W2wXabUSM2GmmXens= X-Received: by 2002:a17:906:5590:: with SMTP id y16mr1379942ejp.286.1633562562801; Wed, 06 Oct 2021 16:22:42 -0700 (PDT) MIME-Version: 1.0 From: V T Date: Thu, 7 Oct 2021 02:22:31 +0300 Message-ID: Subject: SQLGetDiagField bug To: pgsql-odbc@lists.postgresql.org Content-Type: multipart/alternative; boundary="00000000000046397005cdb76c7c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000046397005cdb76c7c Content-Type: text/plain; charset="UTF-8" SQLGetDiagField(SQL_DIAG_NUMBER) with SQL_HANDLE_DBC returns SQL_NO_DATA even if an error record exists. if I request one of unimplemented info types SQL_DATETIME_LITERALS SQL_STANDARD_CLI_CONFORMANCE SQL_XOPEN_CLI_YEAR SQLUINTEGER bitmask; SQLRETURN rc; rc = SQLGetInfo(hdbc, SQL_DATETIME_LITERALS, &bitmask, sizeof(bitmask), NULL); // _ASSERT(rc == 0); if (rc != SQL_SUCCESS) { SQLLEN numRecs; SQLCHAR Msg[SQL_MAX_MESSAGE_LENGTH + 1]; rc = SQLGetDiagField(SQL_HANDLE_DBC, hdbc, 0, SQL_DIAG_NUMBER, &numRecs, 0, nullptr); // _ASSERT(rc == 0); // returns SQL_NO_DATA // but this returns valid message rc = SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, NULL, NULL, Msg, sizeof(Msg), NULL); _ASSERT(rc == 0); __debugbreak(); } Also there is a typo in function PGAPI_GetTypeInfo(HSTMT hstmt, SQLSMALLINT fSqlType) [info.c] https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=info.c;h=2ce1a5acd19052c2525bdd5b2ab02701eb6cba1d;hb=HEAD#l1161 "RECISION" should be "PRECISION" --00000000000046397005cdb76c7c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
SQLGetDiagField(SQL_DIAG_NUMBER) with SQL_HANDLE_DBC retur= ns SQL_NO_DATA even if an error record exists.

if I request one of u= nimplemented info types
SQL_DATETIME_LITERALS
SQL_STANDARD_CLI_CONFO= RMANCE
SQL_XOPEN_CLI_YEAR

=C2=A0 =C2=A0 SQLUINTEGER bitmask;
= =C2=A0 =C2=A0 SQLRETURN rc;

=C2=A0 =C2=A0 rc =3D SQLGetInfo(hdbc, SQ= L_DATETIME_LITERALS, &bitmask, sizeof(bitmask), NULL); // _ASSERT(rc = =3D=3D 0);
=C2=A0 =C2=A0 if (rc !=3D SQL_SUCCESS)
=C2=A0 =C2=A0 {
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 SQLLEN numRecs;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = SQLCHAR Msg[SQL_MAX_MESSAGE_LENGTH + 1];

=C2=A0 =C2=A0 =C2=A0 =C2=A0= rc =3D SQLGetDiagField(SQL_HANDLE_DBC, hdbc, 0, SQL_DIAG_NUMBER, &numR= ecs, 0, nullptr); // _ASSERT(rc =3D=3D 0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /= / returns SQL_NO_DATA

=C2=A0 =C2=A0 =C2=A0 =C2=A0 // but this return= s valid message
=C2=A0 =C2=A0 =C2=A0 =C2=A0 rc =3D SQLGetDiagRec(SQL_HAN= DLE_DBC, hdbc, 1, NULL, NULL, Msg, sizeof(Msg), NULL); _ASSERT(rc =3D=3D 0)= ;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 __debugbreak();
=C2=A0 =C2=A0 }

=
Also there is a typo in function PGAPI_GetTypeInfo(HSTMT hstmt, SQLSMAL= LINT fSqlType) [info.c]
https://git.postgresql.org/gitweb/?p=3Dpsqlodbc.git;= a=3Dblob;f=3Dinfo.c;h=3D2ce1a5acd19052c2525bdd5b2ab02701eb6cba1d;hb=3DHEAD#= l1161
"RECISION" should be "PRECISION"
--00000000000046397005cdb76c7c--