Changeset: e58604f68992 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e58604f68992 Modified Files: clients/odbc/driver/ODBCConvert.c Branch: linear-hashing Log Message:
Treat SQL_NUMERIC and SQL_FLOAT as SQL_DECIMAL and SQL_DOUBLE respectively. diffs (178 lines): diff --git a/clients/odbc/driver/ODBCConvert.c b/clients/odbc/driver/ODBCConvert.c --- a/clients/odbc/driver/ODBCConvert.c +++ b/clients/odbc/driver/ODBCConvert.c @@ -1064,6 +1064,7 @@ ODBCFetch(ODBCStmt *stmt, /* see SQLExecute.c for possible types */ switch (sql_type) { case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -1122,6 +1123,7 @@ ODBCFetch(ODBCStmt *stmt, } break; case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: if (!parsedouble(data, &fval)) { /* Invalid character value for cast specification */ @@ -1299,6 +1301,7 @@ ODBCFetch(ODBCStmt *stmt, *lenp = sz; break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_BIT: { uint64_t f; int n; @@ -1350,6 +1353,7 @@ ODBCFetch(ODBCStmt *stmt, break; } case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: { data = (char *) ptr; @@ -1867,6 +1871,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_WCHAR: case SQL_WVARCHAR: case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -1874,6 +1879,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_HUGEINT: case SQL_REAL: case SQL_DOUBLE: + case SQL_FLOAT: case SQL_BIT: case SQL_TYPE_DATE: case SQL_TYPE_TIME: @@ -1974,6 +1980,7 @@ ODBCFetch(ODBCStmt *stmt, /* fall through */ case SQL_REAL: case SQL_DOUBLE: + case SQL_FLOAT: if (fval < 0 || fval >= 2) { /* Numeric value out of range */ addStmtError(stmt, "22003", NULL, 0); @@ -1987,6 +1994,7 @@ ODBCFetch(ODBCStmt *stmt, } break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2067,6 +2075,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_WCHAR: case SQL_WVARCHAR: case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: /* reparse double and float, parse char */ if (!parseint(data, &nval)) { @@ -2077,6 +2086,7 @@ ODBCFetch(ODBCStmt *stmt, } /* fall through */ case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2169,6 +2179,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_WCHAR: case SQL_WVARCHAR: case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: /* reparse double and float, parse char */ if (!parseint(data, &nval)) { @@ -2179,6 +2190,7 @@ ODBCFetch(ODBCStmt *stmt, } /* fall through */ case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2236,6 +2248,7 @@ ODBCFetch(ODBCStmt *stmt, case SQL_WCHAR: case SQL_WVARCHAR: case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: /* reparse double and float, parse char */ if (!(i = parseint(data, &nval))) { @@ -2251,6 +2264,7 @@ ODBCFetch(ODBCStmt *stmt, /* fall through */ case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2305,9 +2319,11 @@ ODBCFetch(ODBCStmt *stmt, } break; case SQL_DOUBLE: + case SQL_FLOAT: case SQL_REAL: break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2516,6 +2532,7 @@ ODBCFetch(ODBCStmt *stmt, } break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -2598,6 +2615,7 @@ ODBCFetch(ODBCStmt *stmt, } break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_TINYINT: case SQL_SMALLINT: case SQL_INTEGER: @@ -3646,6 +3664,7 @@ ODBCStore(ODBCStmt *stmt, assigns(buf, bufpos, buflen, "' DAY TO SECOND", stmt); break; case SQL_DECIMAL: + case SQL_NUMERIC: case SQL_SMALLINT: case SQL_INTEGER: case SQL_BIGINT: @@ -3763,12 +3782,16 @@ ODBCStore(ODBCStmt *stmt, snprintf(data, sizeof(data), "%s%" PRIu64, nval.sign ? "" : "-", (uint64_t) (nval.val / f)); assigns(buf, bufpos, buflen, data, stmt); if (nval.scale > 0) { - if (sqltype == SQL_DECIMAL) { + switch (sqltype) { + case SQL_DECIMAL: + case SQL_NUMERIC: snprintf(data, sizeof(data), ".%0*" PRIu64, nval.scale, (uint64_t) (nval.val % f)); assigns(buf, bufpos, buflen, data, stmt); - } else { + break; + default: /* Fractional truncation */ addStmtError(stmt, "01S07", NULL, 0); + break; } } else { for (i = nval.scale; i < 0; i++) @@ -3779,6 +3802,7 @@ ODBCStore(ODBCStmt *stmt, break; case SQL_REAL: case SQL_DOUBLE: + case SQL_FLOAT: switch (ctype) { case SQL_C_CHAR: case SQL_C_WCHAR: _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list