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);