]> granicus.if.org Git - postgresql/commitdiff
Add casting for numeric/float4/float8 type value
authorHiroshi Inoue <inoue@tpf.co.jp>
Fri, 16 Feb 2001 03:10:09 +0000 (03:10 +0000)
committerHiroshi Inoue <inoue@tpf.co.jp>
Fri, 16 Feb 2001 03:10:09 +0000 (03:10 +0000)
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

index 95ac701247b41e7b5896cfd8d87f9f6ec9d31391..be96b7ea6da8fa0a9ccd134bc9a9796148f9d332 100644 (file)
@@ -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 */