Bug #9445 Don`t return sqltype for numeric and decimal fields
Submitted: 29 Mar 2005 7:43 Modified: 4 Apr 2005 20:54
Reporter: Vitaliy Vorobyov Email Updates:
Status: Can't repeat Impact on me:
None 
Category:Connector / ODBC Severity:S2 (Serious)
Version:3.51.11 OS:Windows (Windows XP SP1)
Assigned to: CPU Architecture:Any

[29 Mar 2005 7:43] Vitaliy Vorobyov
Description:
SQLDescribeCol don`t return DataTypePtr.

How to repeat:
1. create table t32(d2 decimal(32,2), d4 decimal(32,4);
2. insert into t32(d2, d4) values(123456789012345678901234567890.22, 1234567890123456789012345678.22);

log of odbcte32.exe
SQLExecDirect:
In: Statementhandle = 0x003B1730, 
    StatementText = "select * from t32", Statementlength = 17
Return:	SQL_SUCCESS=0

Describe Column All: 
icol, szColName, *pcbColName, *pfSqlType, *pcbColDef, *pibScale, *pfNullable 
1, d2, 2, , 33, 2, SQL_NULLABLE=1 
2, d4, 2, , 31, 2, SQL_NULLABLE=1 

SQLDescribeCol:
In: StatementHandle = 0x003B1730, ColumnNumber = 1, 
    ColumnName = 0x000A5CA0, BufferLength = 300, NameLengthPtr = 0x000A5718, 
    DataTypePtr = 0x000B2FF0, ColumnSizePtr = 0x00098FA0, DecimalDigits = 0x0009A3C8, 
    NullablePtr = 0x0009A3E0
Return:	SQL_SUCCESS=0
Out: *ColumnName = "d2", *NameLengthPtr = 2, *DataTypePtr = 0, 
     *ColumnSizePtr = 33, *DecimalDigits = 2, *NullablePtr = SQL_NULLABLE=1

SQLDescribeCol:
In: StatementHandle = 0x003B1730, ColumnNumber = 2, 
    ColumnName = 0x0009EBB8, BufferLength = 300, NameLengthPtr = 0x0009A480, 
    DataTypePtr = 0x000A5718, ColumnSizePtr = 0x000B2FF0, DecimalDigits = 0x0009A3C8, 
    NullablePtr = 0x0009A3E0
Return:	SQL_SUCCESS=0
Out: *ColumnName = "d4", *NameLengthPtr = 2, *DataTypePtr = 0, 
     *ColumnSizePtr = 31, *DecimalDigits = 2, *NullablePtr = SQL_NULLABLE=1

Get Data All:
TST1005: Highest bound column is 2.
"d2", "d4"
123456789012345678901234567890.22, 1234567890123456789012345678.22
1 row fetched from 2 columns.

Suggested fix:
n/a
[30 Mar 2005 11:44] Vasily Kishkin
I created test program and tried to repeat the bug. I could't do it. I attached the test program.
Result of program:

Connect....
Drop....
Create....
Test....
ColName = D2,bColName = 2,SqlType = 3,ColDef = 32,Scale = 2,Nullable = 1
ColName = D4,bColName = 2,SqlType = 3,ColDef = 32,Scale = 4,Nullable = 1
Disconnect....
[30 Mar 2005 11:46] Vasily Kishkin
test program of bug # 9445

Attachment: test.c (text/plain), 5.20 KiB.

[19 Apr 2005 13:47] Ralph Gadsby
I'm experiencing a similar problem where SQLdescribecol is returning the wrong data type (SQL_C_DEFAULT instead of SQL_C_CHAR) for all decimal type columns.  Platform is XP SP1.

Table definition (partial):
mysql> DESC WRCUST
    -> ;
+-------------------------+---------------+------+-----+---------+-------+
| Field                   | Type          | Null | Key | Default | Extra |
+-------------------------+---------------+------+-----+---------+-------+
| WRCUST_NUMBER           | char(10)      | NO   | PRI |         |       |
| WRCUST_NAME             | char(30)      | NO   |     |         |       |
| WRCUST_ADDRESS1         | char(30)      | NO   |     |         |       |
| WRCUST_ADDRESS2         | char(30)      | NO   |     |         |       |
| WRCUST_ADDRESS3         | char(30)      | NO   |     |         |       |
| WRCUST_ADDRESS4         | char(30)      | NO   |     |         |       |
| WRCUST_ZIP              | char(9)       | NO   |     |         |       |
| WRCUST_TEL_NO           | char(15)      | NO   |     |         |       |
| WRCUST_FAX_NO           | char(15)      | NO   |     |         |       |
| WRCUST_CONTACT_NM       | char(30)      | NO   |     |         |       |
| WRCUST_CREDIT_LMT       | decimal(15,3) | NO   |     | 0.000   |       |
| WRCUST_ON_ORDER_AMT     | decimal(15,3) | NO   |     | 0.000   |       |

ODBC trace information:
pro32srv        b04-86c	ENTER SQLDescribeCol 
		HSTMT               00AD21C8
		UWORD                       11 
		UCHAR *             0x01DADE10 
		SWORD                       31 
		SWORD *             0x01DADE48
		SWORD *             0x01DADE08
		SQLULEN *           0x01DADE3C
		SWORD *             0x01DADE0C
		SWORD *             0x01DADE34

pro32srv        b04-86c	EXIT  SQLDescribeCol  with return code 0 (SQL_SUCCESS)
		HSTMT               00AD21C8
		UWORD                       11 
		UCHAR *             0x01DADE10 [      17] "WRCUST_CREDIT_LMT"
		SWORD                       31 
		SWORD *             0x01DADE48 (17)
		SWORD *             0x01DADE08 (0)
		SQLULEN *           0x01DADE3C (11)
		SWORD *             0x01DADE0C (3)
		SWORD *             0x01DADE34 (0)

pro32srv        b04-86c	ENTER SQLBindCol 
		HSTMT               00AD21C8
		UWORD                       11 
		SWORD                       99 <SQL_C_DEFAULT>
		PTR                0x00F42744
		SQLLEN                    18
		SQLLEN *            0x00EBD714

pro32srv        b04-86c	EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
		HSTMT               00AD21C8
		UWORD                       11 
		SWORD                       99 <SQL_C_DEFAULT>
		PTR                0x00F42744
		SQLLEN                    18
		SQLLEN *            0x00EBD714 (10)