Wrong column size using MIN/MAX without return result - Mailing list pgsql-odbc

From Fabrízio de Royes Mello
Subject Wrong column size using MIN/MAX without return result
Date
Msg-id CAFcNs+o499EnwGaFBzeNHAyPrjQ7QdJVudE34TtnaLMT_2HAyw@mail.gmail.com
Whole thread Raw
Responses Re: Wrong column size using MIN/MAX without return result  ("Inoue, Hiroshi" <h-inoue@dream.email.ne.jp>)
Re: Wrong column size using MIN/MAX without return result  (Clemens Ladisch <clemens@ladisch.de>)
List pgsql-odbc
Hi all,

We've experiencing an issue using the driver version 10.03.0000 under unixODBC 2.3.1 environment. 

When we use MIN/MAX functions in a query returning CHAR without results,  the column size is wrong. Seems if we use any function that return "text types" without returning tuples the column size is wrong.

Below there are some self contained testcases:

** SQL testcase 1 (ERROR):

SQL> DROP TABLE IF EXISTS T1;
SQL> CREATE TABLE T1 ( FLD char(10) NOT NULL DEFAULT '         ' );
SQL> INSERT INTO T1 VALUES('1');
SQL> INSERT INTO T1 VALUES('22');
SQL> INSERT INTO T1 VALUES('333');
SQL> SELECT MAX(FLD) AS OK FROM T1;
+-----------+
| ok        |
+-----------+
| 333       |
+-----------+
SQLRowCount returns 1
1 rows fetched
SQL> SELECT MAX(FLD) AS ERROR FROM T1 WHERE 1 = 0;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| error                                                                                                                                                                                                                                                          |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                                                                                                                                                                |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched


** SQL testcase 2 (ERROR):
SQL> DROP TABLE IF EXISTS T1;
SQL> CREATE TABLE T1 ( FLD char(10) NOT NULL DEFAULT '         ' );
SQL> INSERT INTO T1 VALUES('1');
SQL> INSERT INTO T1 VALUES('22');
SQL> INSERT INTO T1 VALUES('333');
SQL> SELECT SUBSTR(FLD,1,5) AS OK FROM T1 WHERE FLD = '333';
+----+
| ok |
+----+
| 333|
+----+
SQLRowCount returns 1
1 rows fetched
SQL> SELECT SUBSTR(FLD,1,5) AS ERROR FROM T1 WHERE 1 = 0;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| error                                                                                                                                                                                                                                                                                                       |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 0


** SQL testcase 3 (OK):
SQL> DROP TABLE IF EXISTS T1;
SQL> CREATE TABLE T1 ( FLD char(10) NOT NULL DEFAULT '         ' );
SQL> INSERT INTO T1 VALUES('1');
SQL> INSERT INTO T1 VALUES('22');
SQL> INSERT INTO T1 VALUES('333');
SQL> SELECT FLD AS OK FROM T1 WHERE FLD = '333';
+-----------+
| ok        |
+-----------+
| 333       |
+-----------+
SQLRowCount returns 1
1 rows fetched
SQL> SELECT FLD AS ERROR FROM T1 WHERE 1 = 0;
+-----------+
| error     |
+-----------+
+-----------+
SQLRowCount returns 0

There are some config to fix this weird behaviour?

Regards,

--
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

pgsql-odbc by date:

Previous
From: Tom Lane
Date:
Subject: Re: Building libpq independently of server
Next
From: Daniel Cory
Date:
Subject: Use of undocumented functions