ID: 21340
Comment by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Open
Bug Type: Sybase-ct (ctlib) related
Operating System: redhat linux 7.3
PHP Version: 4.3.0
New Comment:
Update: this patch doesn't quite work, a value of '0' is returned as
NULL.
In the meantime, I've downgraded to 4.2.3 and will look into this issue
more as I get time.
Previous Comments:
------------------------------------------------------------------------
[2003-01-02 17:27:56] [EMAIL PROTECTED]
Looks like I forgot to seperate CS_DECIMAL_TYPE from the
CS_NUMERIC_TYPE string conversion. As far as I can tell, DECIMAL types
should still be returned as float/real datatypes, though I am not very
familiar with them.
I can upload another patch if wanted, but the changes are so minor and
straightforward that I don't see a need right now. :)
------------------------------------------------------------------------
[2003-01-02 10:57:49] [EMAIL PROTECTED]
Large NUMERIC (20,0) fields can easily overflow the built-in php
datatypes (float, real), causing truncation to 2147483647 (2^31 - 1).
Some solutions:
1) Return numerics as string
2) Return numerics as gmp val
3) redesign my database
Until (2) becomes a builtin datatype in PHP, I don't see this as a good
solution. (3) is out of the question, so I elected to use (1); patch
follows. I also have the CS_NUMERIC_TYPE ident as "numeric".
--- php_sybase_ct.c.old Thu Jan 2 11:42:57 2003
+++ php_sybase_ct.c Thu Jan 2 11:46:18 2003
@@ -1166,9 +1166,9 @@
break;
case CS_NUMERIC_TYPE:
case CS_DECIMAL_TYPE:
- result->datafmt[i].maxlength =
result->datafmt[i].precision + 3;
- /* numeric(10) vs numeric(10, 1) */
- result->numerics[i] =
(result->datafmt[i].scale == 0) ? 1 : 2;
+ /* numerics can overflow real and long
types, return as a string */
+ result->datafmt[i].maxlength++;
+ result->numerics[i] = 0;
break;
default:
result->datafmt[i].maxlength++;
@@ -1769,10 +1769,12 @@
break;
case CS_REAL_TYPE:
case CS_FLOAT_TYPE:
- case CS_NUMERIC_TYPE:
case CS_DECIMAL_TYPE:
return "real";
break;
+ case CS_NUMERIC_TYPE:
+ return "numeric";
+ break;
case CS_MONEY_TYPE:
case CS_MONEY4_TYPE:
return "money";
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=21340&edit=1