mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-12-21 11:00:04 +08:00
Add support for SQLGetData converting floating point types (#422)
This commit is contained in:
committed by
GitHub
parent
c423097326
commit
bf77523c1d
@@ -1360,15 +1360,86 @@ SQLRETURN SQL_API SQLGetData(
|
|||||||
break;
|
break;
|
||||||
// case MDB_MONEY: TODO
|
// case MDB_MONEY: TODO
|
||||||
case MDB_FLOAT:
|
case MDB_FLOAT:
|
||||||
|
switch (fCType) {
|
||||||
|
case SQL_C_FLOAT:
|
||||||
*(float*)rgbValue = mdb_get_single(mdb->pg_buf, col->cur_value_start);
|
*(float*)rgbValue = mdb_get_single(mdb->pg_buf, col->cur_value_start);
|
||||||
if (pcbValue)
|
if (pcbValue)
|
||||||
*pcbValue = sizeof(float);
|
*pcbValue = sizeof(float);
|
||||||
break;
|
break;
|
||||||
|
case SQL_C_DOUBLE:
|
||||||
|
*(double*)rgbValue = (double)mdb_get_single(mdb->pg_buf, col->cur_value_start);
|
||||||
|
if (pcbValue)
|
||||||
|
*pcbValue = sizeof(double);
|
||||||
|
break;
|
||||||
|
case SQL_C_CHAR:
|
||||||
|
case SQL_C_WCHAR:
|
||||||
|
case SQL_C_STINYINT:
|
||||||
|
case SQL_C_UTINYINT:
|
||||||
|
case SQL_C_TINYINT:
|
||||||
|
case SQL_C_SBIGINT:
|
||||||
|
case SQL_C_UBIGINT:
|
||||||
|
case SQL_C_SSHORT:
|
||||||
|
case SQL_C_USHORT:
|
||||||
|
case SQL_C_SHORT:
|
||||||
|
case SQL_C_SLONG:
|
||||||
|
case SQL_C_ULONG:
|
||||||
|
case SQL_C_LONG:
|
||||||
|
case SQL_C_NUMERIC:
|
||||||
|
// case SQL_C_FLOAT:
|
||||||
|
// case SQL_C_DOUBLE:
|
||||||
|
case SQL_C_BIT:
|
||||||
|
case SQL_C_BINARY:
|
||||||
|
case SQL_C_INTERVAL_YEAR_TO_MONTH:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_HOUR:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_MINUTE:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_SECOND:
|
||||||
|
case SQL_C_INTERVAL_HOUR_TO_MINUTE:
|
||||||
|
case SQL_C_INTERVAL_HOUR_TO_SECOND:
|
||||||
|
strcpy(stmt->sqlState, "HYC00"); // Not implemented
|
||||||
|
return SQL_ERROR;
|
||||||
|
default:
|
||||||
|
strcpy(stmt->sqlState, "07006"); // Not allowed
|
||||||
|
return SQL_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case MDB_DOUBLE:
|
case MDB_DOUBLE:
|
||||||
|
switch (fCType) {
|
||||||
|
case SQL_C_DOUBLE:
|
||||||
*(double*)rgbValue = mdb_get_double(mdb->pg_buf, col->cur_value_start);
|
*(double*)rgbValue = mdb_get_double(mdb->pg_buf, col->cur_value_start);
|
||||||
if (pcbValue)
|
if (pcbValue)
|
||||||
*pcbValue = sizeof(double);
|
*pcbValue = sizeof(double);
|
||||||
break;
|
break;
|
||||||
|
case SQL_C_CHAR:
|
||||||
|
case SQL_C_WCHAR:
|
||||||
|
case SQL_C_STINYINT:
|
||||||
|
case SQL_C_UTINYINT:
|
||||||
|
case SQL_C_TINYINT:
|
||||||
|
case SQL_C_SBIGINT:
|
||||||
|
case SQL_C_UBIGINT:
|
||||||
|
case SQL_C_SSHORT:
|
||||||
|
case SQL_C_USHORT:
|
||||||
|
case SQL_C_SHORT:
|
||||||
|
case SQL_C_SLONG:
|
||||||
|
case SQL_C_ULONG:
|
||||||
|
case SQL_C_LONG:
|
||||||
|
case SQL_C_NUMERIC:
|
||||||
|
case SQL_C_FLOAT:
|
||||||
|
// case SQL_C_DOUBLE:
|
||||||
|
case SQL_C_BIT:
|
||||||
|
case SQL_C_BINARY:
|
||||||
|
case SQL_C_INTERVAL_YEAR_TO_MONTH:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_HOUR:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_MINUTE:
|
||||||
|
case SQL_C_INTERVAL_DAY_TO_SECOND:
|
||||||
|
case SQL_C_INTERVAL_HOUR_TO_MINUTE:
|
||||||
|
case SQL_C_INTERVAL_HOUR_TO_SECOND:
|
||||||
|
strcpy(stmt->sqlState, "HYC00"); // Not implemented
|
||||||
|
return SQL_ERROR;
|
||||||
|
default:
|
||||||
|
strcpy(stmt->sqlState, "07006"); // Not allowed
|
||||||
|
return SQL_ERROR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
#if ODBCVER >= 0x0300
|
#if ODBCVER >= 0x0300
|
||||||
// returns text if old odbc
|
// returns text if old odbc
|
||||||
case MDB_DATETIME:
|
case MDB_DATETIME:
|
||||||
|
|||||||
Reference in New Issue
Block a user