diff options
author | Hiroshi Inoue <inoue@tpf.co.jp> | 2002-05-22 05:51:03 +0000 |
---|---|---|
committer | Hiroshi Inoue <inoue@tpf.co.jp> | 2002-05-22 05:51:03 +0000 |
commit | 79420840ee4f56b8399d3f526bb45ce788198e2e (patch) | |
tree | 83027ac6beca92e86847cf9468d58e9385bcc6fc /src/interfaces/odbc/bind.c | |
parent | 6c6f395a8aca8a9525d62cbf46fbafd130bdb9e5 (diff) | |
download | postgresql-79420840ee4f56b8399d3f526bb45ce788198e2e.tar.gz postgresql-79420840ee4f56b8399d3f526bb45ce788198e2e.zip |
1) Support Keyset Driven driver cursors.
2) Supprt ARD precision/scale and SQL_C_NUEMRIC.
3) Minimal implementation of SQLGetDiagField().
4) SQLRowCount() reports the result of SQLSetPos and SQLBulkOperation.
5) int8 -> SQL_NUMERIC for Microsoft Jet.
6) Support isolation level change.
7) ODBC3.0 SQLSTATE code.
8) Append mode log files.
Diffstat (limited to 'src/interfaces/odbc/bind.c')
-rw-r--r-- | src/interfaces/odbc/bind.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/interfaces/odbc/bind.c b/src/interfaces/odbc/bind.c index e931b8b8d51..e6deedaa8b6 100644 --- a/src/interfaces/odbc/bind.c +++ b/src/interfaces/odbc/bind.c @@ -69,6 +69,23 @@ PGAPI_BindParameter( opts->parameters[ipar].SQLType = fSqlType; opts->parameters[ipar].column_size = cbColDef; opts->parameters[ipar].decimal_digits = ibScale; + opts->parameters[ipar].precision = 0; + opts->parameters[ipar].scale = 0; +#if (ODBCVER >= 0x0300) + switch (fCType) + { + case SQL_C_NUMERIC: + if (cbColDef > 0) + opts->parameters[ipar].precision = (UInt2) cbColDef; + if (ibScale > 0) + opts->parameters[ipar].scale = ibScale; + break; + case SQL_C_TYPE_TIMESTAMP: + if (ibScale > 0) + opts->parameters[ipar].precision = ibScale; + break; + } +#endif /* ODBCVER */ /* * If rebinding a parameter that had data-at-exec stuff in it, then @@ -210,6 +227,8 @@ inolog("Column 0 is type %d not of type SQL_C_BOOKMARK", fCType); free(opts->bindings[icol].ttlbuf); opts->bindings[icol].ttlbuf = NULL; opts->bindings[icol].ttlbuflen = 0; + opts->bindings[icol].precision = 0; + opts->bindings[icol].scale = 0; } else { @@ -218,6 +237,13 @@ inolog("Column 0 is type %d not of type SQL_C_BOOKMARK", fCType); opts->bindings[icol].buffer = rgbValue; opts->bindings[icol].used = pcbValue; opts->bindings[icol].returntype = fCType; +#if (ODBCVER >= 0x0300) + if (SQL_C_NUMERIC == fCType) + opts->bindings[icol].precision = 32; + else +#endif /* ODBCVER */ + opts->bindings[icol].precision = 0; + opts->bindings[icol].scale = 0; mylog(" bound buffer[%d] = %u\n", icol, opts->bindings[icol].buffer); } @@ -460,6 +486,8 @@ reset_a_parameter_binding(APDFields *self, int ipar) self->parameters[ipar].SQLType = 0; self->parameters[ipar].column_size = 0; self->parameters[ipar].decimal_digits = 0; + self->parameters[ipar].precision = 0; + self->parameters[ipar].scale = 0; self->parameters[ipar].data_at_exec = FALSE; self->parameters[ipar].lobj_oid = 0; } |