Re: PostgreSQL ODBC SQL_CONVERT_* in SQLGetInfo support

From: "Inoue, Hiroshi" <h-inoue(at)dream(dot)email(dot)ne(dot)jp>
To: Xuesong Gao <xgao(at)senturus(dot)com>
Cc: "pgsql-odbc(at)postgresql(dot)org" <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: PostgreSQL ODBC SQL_CONVERT_* in SQLGetInfo support
Date: 2020-07-03 11:25:17
Message-ID: 37f23b3c-2fc3-72bf-8bcd-678760ced63d@dream.email.ne.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi,

I would take care of this issue.

regards,
Hiroshi Inoue

On 2020/07/02 2:14, Xuesong Gao wrote:
>
> Hi,
>
> I am using PostgreSQL ODBC with Power BI and got this error in Power
> BI log:
>
> Failed to convert from wchar to wvarchar for expression \"Snapshot
> Year Month\". You can override this by using SqlGetInfo for converting
> from WCHAR to WVARCHAR.
>
> It turned out that info.c does not return correct values even though
> PostgreSQL support conversions between different data type. So I put
> following line there and it starts working:
>
>                                 case SQL_CONVERT_BIT:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_BIT |
>
> SQL_CVT_INTEGER |
>
> SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR | SQL_CVT_WCHAR |
> SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR;
>
> break;
>
>                                 case SQL_CONVERT_TINYINT:
>
> len = sizeof(SQLUINTEGER);
>
> value = 0; /* PostgreSQL does not support tinyint */
>
> break;
>
>                                 case SQL_CONVERT_INTEGER:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_BIT |
>
> SQL_CVT_SMALLINT | SQL_CVT_INTEGER |  SQL_CVT_BIGINT |
>
> SQL_CVT_REAL | SQL_CVT_FLOAT | SQL_CVT_DOUBLE | SQL_CVT_NUMERIC |
> SQL_CVT_DECIMAL |
>
> SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR | SQL_CVT_WCHAR |
> SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR;
>
> break;
>
>                                 case SQL_CONVERT_SMALLINT:
>
>                                 case SQL_CONVERT_BIGINT:
>
>                                 case SQL_CONVERT_REAL:
>
>                                 case SQL_CONVERT_FLOAT:
>
>                                 case SQL_CONVERT_DOUBLE:
>
>                                 case SQL_CONVERT_NUMERIC:
>
>                                 case SQL_CONVERT_DECIMAL:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_SMALLINT | SQL_CVT_INTEGER |  SQL_CVT_BIGINT |
>
> SQL_CVT_REAL | SQL_CVT_FLOAT | SQL_CVT_DOUBLE | SQL_CVT_NUMERIC |
> SQL_CVT_DECIMAL |
>
> SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR | SQL_CVT_WCHAR |
> SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR;
>
> break;
>
>                                 case SQL_CONVERT_CHAR:
>
>                                 case
> SQL_CONVERT_VARCHAR:                                /* ODBC 1.0 */
>
>                                 case SQL_CONVERT_LONGVARCHAR:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_BIT |
>
> SQL_CVT_SMALLINT | SQL_CVT_INTEGER |  SQL_CVT_BIGINT |
>
> SQL_CVT_REAL | SQL_CVT_FLOAT | SQL_CVT_DOUBLE | SQL_CVT_NUMERIC |
> SQL_CVT_DECIMAL |
>
> SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR | SQL_CVT_WCHAR |
> SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR |
>
> SQL_CVT_DATE | SQL_CVT_TIME | SQL_CVT_TIMESTAMP;
>
> break;
>
>                                 case SQL_CONVERT_DATE:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR |
> SQL_CVT_WCHAR | SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR |
>
> SQL_CVT_DATE | SQL_CVT_TIMESTAMP;
>
> break;
>
>                                 case SQL_CONVERT_TIME:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR |
> SQL_CVT_WCHAR | SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR |
>
> SQL_CVT_TIME;
>
> break;
>
>                                 case SQL_CONVERT_TIMESTAMP:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR |
> SQL_CVT_WCHAR | SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR |
>
> SQL_CVT_DATE | SQL_CVT_TIME | SQL_CVT_TIMESTAMP;
>
> break;
>
>                                 case SQL_CONVERT_BINARY:
>
>                                 case
> SQL_CONVERT_VARBINARY:                            /* ODBC 1.0 */
>
> len = sizeof(SQLUINTEGER);
>
> value = 0; /* PostgreSQL does not support binary, varbinary */
>
> break;
>
>                                 case SQL_CONVERT_LONGVARBINARY:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_LONGVARBINARY;
>
> break;
>
> #ifdef UNICODE_SUPPORT
>
>                                 case SQL_CONVERT_WCHAR:
>
>                                 case SQL_CONVERT_WLONGVARCHAR:
>
>                                 case SQL_CONVERT_WVARCHAR:
>
> len = sizeof(SQLUINTEGER);
>
> value = SQL_CVT_BIT |
>
> SQL_CVT_SMALLINT | SQL_CVT_INTEGER |  SQL_CVT_BIGINT |
>
> SQL_CVT_REAL | SQL_CVT_FLOAT | SQL_CVT_DOUBLE | SQL_CVT_NUMERIC |
> SQL_CVT_DECIMAL |
>
> SQL_CVT_CHAR | SQL_CVT_VARCHAR | SQL_CVT_LONGVARCHAR | SQL_CVT_WCHAR |
> SQL_CVT_WVARCHAR | SQL_CVT_WLONGVARCHAR |
>
> SQL_CVT_DATE | SQL_CVT_TIME |  SQL_CVT_TIMESTAMP;
>
> break;
>
> #endif /* UNICODE_SUPPORT */
>
>
>
> *Song  X. Gao*
> Solutions Architect
>
> Email xgao(at)senturus(dot)com <mailto:xgao(at)senturus(dot)com>
> Mobile 732 406 6347
> *senturus.com* <http://www.senturus.com/>
>

In response to

Browse pgsql-odbc by date

  From Date Subject
Next Message Dave Cardwell 2020-07-10 22:20:21 Configuring postgresql12-odbc to use the correct protocol version
Previous Message Xuesong Gao 2020-07-01 17:14:59 PostgreSQL ODBC SQL_CONVERT_* in SQLGetInfo support