diff --git a/src/interfaces/odbc/convert.c b/src/interfaces/odbc/convert.c index e5954ae75d18c6ff727bc891d7572639cc8d9865..5e20631067d256a5ffc77f81966c932d22576a79 100644 --- a/src/interfaces/odbc/convert.c +++ b/src/interfaces/odbc/convert.c @@ -974,7 +974,7 @@ copy_statement_with_parameters(StatementClass *stmt) ConnectionClass *conn = SC_get_conn(stmt); ConnInfo *ci = &(conn->connInfo); BOOL prepare_dummy_cursor = FALSE, begin_first = FALSE; - char token_save[32]; + char token_save[64]; int token_len; BOOL prev_token_end; #ifdef DRIVER_CURSOR_IMPLEMENT @@ -1247,7 +1247,7 @@ copy_statement_with_parameters(StatementClass *stmt) token_save[0] = oldchar; token_len = 1; } - else + else if (token_len + 1 < sizeof(token_save)) token_save[token_len++] = oldchar; } CVT_APPEND_CHAR(oldchar); diff --git a/src/interfaces/odbc/pgtypes.c b/src/interfaces/odbc/pgtypes.c index 0af96536e8fc4f44a44e588655a0677977ddd24b..d6995f8c46f2c002c8c4cf7a453981455777174d 100644 --- a/src/interfaces/odbc/pgtypes.c +++ b/src/interfaces/odbc/pgtypes.c @@ -586,10 +586,10 @@ pgtype_precision(StatementClass *stmt, Int4 type, int col, int handle_unknown_si return 8; case PG_TYPE_ABSTIME: - case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: - /*return 19;*/ -return 21; + return 22; + case PG_TYPE_DATETIME: + return 22; case PG_TYPE_BOOL: return 1; @@ -678,12 +678,12 @@ pgtype_length(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_ case PG_TYPE_DATE: case PG_TYPE_TIME: - return 6; + return 6; /* sizeof(DATE(TIME)_STRUCT) */ case PG_TYPE_ABSTIME: case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: - return 16; + return 16; /* sizeof(TIMESTAMP_STRUCT) */ /* Character types (and NUMERIC) use the default precision */ case PG_TYPE_VARCHAR: @@ -723,9 +723,10 @@ pgtype_scale(StatementClass *stmt, Int4 type, int col) * "yyyy-mm=dd hh:mm:ss[.f...]" */ case PG_TYPE_ABSTIME: - case PG_TYPE_DATETIME: case PG_TYPE_TIMESTAMP: return 0; + case PG_TYPE_DATETIME: + return 0; case PG_TYPE_NUMERIC: return getNumericScale(stmt, type, col);