xref: /PHP-5.4/ext/sybase_ct/tests/bug29064.phpt (revision ec17daec)
1--TEST--
2Sybase-CT bug #29064 (Exact numeric/decimal/money datatypes lose precision)
3--SKIPIF--
4<?php require('skipif.inc'); ?>
5--FILE--
6<?php
7/* This file is part of PHP test framework for ext/sybase_ct
8 *
9 * $Id$
10 */
11
12  require('test.inc');
13
14  $db= sybase_connect_ex();
15
16  // Create a temporary table and fill it with test values
17  var_dump(sybase_query('
18    create table #test (
19      test_decimal      decimal(38, 6)  null,
20      test_numeric      numeric(38, 12) null,
21      test_money        money           null,
22      test_bigint       decimal(38, 0)  null,
23      test_int          int             null,
24      test_smallmoney   smallmoney      null,
25      test_smallint     smallint        null,
26      test_tinyint      tinyint         null,
27      test_real         float           null,
28      test_double       float           null
29    )
30  ', $db));
31  var_dump(sybase_query('
32    insert into #test (
33      test_decimal,
34      test_numeric,
35      test_money,
36      test_bigint,
37      test_int,
38      test_smallmoney,
39      test_smallint,
40      test_tinyint,
41      test_real,
42      test_double
43    ) values (
44      12345678901234567890123456789012.123456,
45      12345678901234567890123456.123456789012,
46      123456789012345.1234,
47      12345678901234567890123456789012345678,
48      1234567890,
49      123456.1234,
50      12345,
51      123,
52      123456789.12345679,
53      123456789.12345679
54    )
55  ', $db));
56  var_dump(sybase_query('
57    insert into #test (
58      test_decimal,
59      test_numeric,
60      test_money,
61      test_bigint,
62      test_int,
63      test_smallmoney,
64      test_smallint,
65      test_tinyint,
66      test_real,
67      test_double
68    ) values (
69      -12345678901234567890123456789012.123456,
70      -12345678901234567890123456.123456789012,
71      -123456789012345.1234,
72      -12345678901234567890123456789012345678,
73      -1234567890,
74      -123456.1234,
75      -12345,
76      255,
77      -123456789.12345679,
78      -123456789.12345679
79    )
80  ', $db));
81
82  // Select the data
83  var_dump(sybase_select_ex($db, 'select * from #test'));
84
85  // Clean up and close connection
86  var_dump(sybase_query('drop table #test', $db));
87  sybase_close($db);
88?>
89--EXPECTF--
90bool(true)
91bool(true)
92bool(true)
93>>> Query: select * from #test
94<<< Return: resource
95array(2) {
96  [0]=>
97  array(10) {
98    ["test_decimal"]=>
99    string(39) "12345678901234567890123456789012.123456"
100    ["test_numeric"]=>
101    string(39) "12345678901234567890123456.123456789012"
102    ["test_money"]=>
103    string(18) "123456789012345.12"
104    ["test_bigint"]=>
105    string(38) "12345678901234567890123456789012345678"
106    ["test_int"]=>
107    int(1234567890)
108    ["test_smallmoney"]=>
109    float(123456.12)
110    ["test_smallint"]=>
111    int(12345)
112    ["test_tinyint"]=>
113    int(123)
114    ["test_real"]=>
115    string(18) "123456789.12345679"
116    ["test_double"]=>
117    string(18) "123456789.12345679"
118  }
119  [1]=>
120  array(10) {
121    ["test_decimal"]=>
122    string(40) "-12345678901234567890123456789012.123456"
123    ["test_numeric"]=>
124    string(40) "-12345678901234567890123456.123456789012"
125    ["test_money"]=>
126    string(19) "-123456789012345.12"
127    ["test_bigint"]=>
128    string(39) "-12345678901234567890123456789012345678"
129    ["test_int"]=>
130    int(-1234567890)
131    ["test_smallmoney"]=>
132    float(-123456.12)
133    ["test_smallint"]=>
134    int(-12345)
135    ["test_tinyint"]=>
136    int(255)
137    ["test_real"]=>
138    string(19) "-123456789.12345679"
139    ["test_double"]=>
140    string(19) "-123456789.12345679"
141  }
142}
143bool(true)
144