From b24b2a5be0c087706e18534f57fee697d8cfa572 Mon Sep 17 00:00:00 2001
From: Hiroshi Inoue <inoue@tpf.co.jp>
Date: Fri, 16 Feb 2001 03:10:09 +0000
Subject: [PATCH] Add casting for numeric/float4/float8 type value
 automatically to compensate the lack of automatic conversion functionality of
 PostgreSQL server. For example if there's a numeric type binding    1.2567
 --> 1.2567::numeric. I hope this change would enable the use of numeric type
 in MS-Access etc.

Thanks Hiroki Kataoka for his checking my code.
---
 src/interfaces/odbc/convert.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/interfaces/odbc/convert.c b/src/interfaces/odbc/convert.c
index 95ac701247b..be96b7ea6da 100644
--- a/src/interfaces/odbc/convert.c
+++ b/src/interfaces/odbc/convert.c
@@ -1065,6 +1065,33 @@ int lobj_fd, retval;
 			/*	because of no conversion operator for bool and int4, SQL_BIT */
 			/*	must be quoted (0 or 1 is ok to use inside the quotes) */
 
+		case SQL_REAL:
+			if (buf)
+            			my_strcpy(param_string, sizeof(param_string), buf, used);
+			sprintf(tmp, "'%s'::float4", param_string);
+			strcpy(&new_statement[npos], tmp);
+			npos += strlen(tmp);
+			break;
+		case SQL_FLOAT:
+		case SQL_DOUBLE:
+			if (buf)
+            			my_strcpy(param_string, sizeof(param_string), buf, used);
+			sprintf(tmp, "'%s'::float8", param_string);
+			strcpy(&new_statement[npos], tmp);
+			npos += strlen(tmp);
+			break;
+		case SQL_NUMERIC:
+			if (buf)
+			{
+				cbuf[0] = '\'';
+				my_strcpy(cbuf + 1, sizeof(cbuf) - 12, buf, used);	/* 12 = 1('\'') + strlen("'::numeric") + 1('\0') */
+				strcat(cbuf, "'::numeric");
+			}
+			else
+				sprintf(cbuf, "'%s'::numeric", param_string);
+			my_strcpy(&new_statement[npos], sizeof(stmt->stmt_with_params) - npos - 1, cbuf, strlen(cbuf));
+			npos += strlen(&new_statement[npos]);
+			break;
 		default:		/* a numeric type or SQL_BIT */
 			if (param_sqltype == SQL_BIT)
 				new_statement[npos++] = '\'';	/*    Open Quote */
-- 
GitLab