@@ -14,31 +14,33 @@ void main() {
14
14
await connection.execute ('''
15
15
CREATE TEMPORARY TABLE t (
16
16
i int, s serial, bi bigint, bs bigserial, bl boolean, si smallint,
17
- t text, f real, d double precision, dt date, ts timestamp, tsz timestamptz, j jsonb, ba bytea,
17
+ t text, f real, d double precision, dt date, ts timestamp, tsz timestamptz, n numeric, j jsonb, ba bytea,
18
18
u uuid, v varchar, p point, jj json, ia _int4, ta _text, da _float8, ja _jsonb)
19
19
''' );
20
20
21
21
await connection.execute (
22
- 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, j, ba, u, v, p, jj, ia, ta, da, ja) '
22
+ 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, n, j, ba, u, v, p, jj, ia, ta, da, ja) '
23
23
'VALUES (-2147483648, -9223372036854775808, TRUE, -32768, '
24
24
"'string', 10.0, 10.0, '1983-11-06', "
25
25
"'1983-11-06 06:00:00.000000', '1983-11-06 06:00:00.000000', "
26
+ "'-1234567890.0987654321', "
26
27
"'{\" key\" :\" value\" }', E'\\\\ 000', '00000000-0000-0000-0000-000000000000', "
27
28
"'abcdef', '(0.01, 12.34)', '{\" key\" : \" value\" }', '{}', '{}', '{}', '{}')" );
28
29
await connection.execute (
29
- 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, j, ba, u, v, p, jj, ia, ta, da, ja) '
30
+ 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, n, j, ba, u, v, p, jj, ia, ta, da, ja) '
30
31
'VALUES (2147483647, 9223372036854775807, FALSE, 32767, '
31
32
"'a significantly longer string to the point where i doubt this actually matters', "
32
33
"10.25, 10.125, '2183-11-06', '2183-11-06 00:00:00.111111', "
33
34
"'2183-11-06 00:00:00.999999', "
35
+ "'1000000000000000000000000000.0000000000000000000000000001', "
34
36
"'[{\" key\" :1}]', E'\\\\ 377', 'FFFFFFFF-ffff-ffff-ffff-ffffffffffff', "
35
37
"'01234', '(0.2, 100)', '{}', '{-123, 999}', '{\" a\" , \" lorem ipsum\" , \"\" }', "
36
38
"'{1, 2, 4.5, 1234.5}', '{1, \"\\\" test\\\"\" , \" {\\\" a\\\" : \\\" b\\\" }\" }')" );
37
39
38
40
await connection.execute (
39
- 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, j, ba, u, v, p, jj, ia, ta, da, ja) '
41
+ 'INSERT INTO t (i, bi, bl, si, t, f, d, dt, ts, tsz, n, j, ba, u, v, p, jj, ia, ta, da, ja) '
40
42
'VALUES (null, null, null, null, null, null, null, null, null, null, null, null, null, '
41
- 'null, null, null, null, null, null, null )' );
43
+ 'null, null, null, null, null, null, null, null )' );
42
44
});
43
45
tearDown (() async {
44
46
await connection.close ();
@@ -66,16 +68,17 @@ void main() {
66
68
expect (row1[9 ], equals (DateTime .utc (1983 , 11 , 6 )));
67
69
expect (row1[10 ], equals (DateTime .utc (1983 , 11 , 6 , 6 )));
68
70
expect (row1[11 ], equals (DateTime .utc (1983 , 11 , 6 , 6 )));
69
- expect (row1[12 ], equals ({'key' : 'value' }));
70
- expect (row1[13 ], equals ([0 ]));
71
- expect (row1[14 ], equals ('00000000-0000-0000-0000-000000000000' ));
72
- expect (row1[15 ], equals ('abcdef' ));
73
- expect (row1[16 ], equals (PgPoint (0.01 , 12.34 )));
74
- expect (row1[17 ], equals ({'key' : 'value' }));
75
- expect (row1[18 ], equals (< int > []));
76
- expect (row1[19 ], equals (< String > []));
77
- expect (row1[20 ], equals (< double > []));
78
- expect (row1[21 ], equals ([]));
71
+ expect (row1[12 ], equals ('-1234567890.0987654321' ));
72
+ expect (row1[13 ], equals ({'key' : 'value' }));
73
+ expect (row1[14 ], equals ([0 ]));
74
+ expect (row1[15 ], equals ('00000000-0000-0000-0000-000000000000' ));
75
+ expect (row1[16 ], equals ('abcdef' ));
76
+ expect (row1[17 ], equals (PgPoint (0.01 , 12.34 )));
77
+ expect (row1[18 ], equals ({'key' : 'value' }));
78
+ expect (row1[19 ], equals (< int > []));
79
+ expect (row1[20 ], equals (< String > []));
80
+ expect (row1[21 ], equals (< double > []));
81
+ expect (row1[22 ], equals ([]));
79
82
80
83
// upper bound row
81
84
expect (row2[0 ], equals (2147483647 ));
@@ -95,21 +98,22 @@ void main() {
95
98
expect (row2[9 ], equals (DateTime .utc (2183 , 11 , 6 )));
96
99
expect (row2[10 ], equals (DateTime .utc (2183 , 11 , 6 , 0 , 0 , 0 , 111 , 111 )));
97
100
expect (row2[11 ], equals (DateTime .utc (2183 , 11 , 6 , 0 , 0 , 0 , 999 , 999 )));
101
+ expect (row2[12 ], equals ('1000000000000000000000000000.0000000000000000000000000001' ));
98
102
expect (
99
- row2[12 ],
103
+ row2[13 ],
100
104
equals ([
101
105
{'key' : 1 }
102
106
]));
103
- expect (row2[13 ], equals ([255 ]));
104
- expect (row2[14 ], equals ('ffffffff-ffff-ffff-ffff-ffffffffffff' ));
105
- expect (row2[15 ], equals ('01234' ));
106
- expect (row2[16 ], equals (PgPoint (0.2 , 100 )));
107
- expect (row2[17 ], equals ({}));
108
- expect (row2[18 ], equals (< int > [- 123 , 999 ]));
109
- expect (row2[19 ], equals (< String > ['a' , 'lorem ipsum' , '' ]));
110
- expect (row2[20 ], equals (< double > [1 , 2 , 4.5 , 1234.5 ]));
107
+ expect (row2[14 ], equals ([255 ]));
108
+ expect (row2[15 ], equals ('ffffffff-ffff-ffff-ffff-ffffffffffff' ));
109
+ expect (row2[16 ], equals ('01234' ));
110
+ expect (row2[17 ], equals (PgPoint (0.2 , 100 )));
111
+ expect (row2[18 ], equals ({}));
112
+ expect (row2[19 ], equals (< int > [- 123 , 999 ]));
113
+ expect (row2[20 ], equals (< String > ['a' , 'lorem ipsum' , '' ]));
114
+ expect (row2[21 ], equals (< double > [1 , 2 , 4.5 , 1234.5 ]));
111
115
expect (
112
- row2[21 ],
116
+ row2[22 ],
113
117
equals ([
114
118
1 ,
115
119
'test' ,
@@ -139,6 +143,7 @@ void main() {
139
143
expect (row3[19 ], isNull);
140
144
expect (row3[20 ], isNull);
141
145
expect (row3[21 ], isNull);
146
+ expect (row3[22 ], isNull);
142
147
});
143
148
144
149
test ('Fetch/insert empty string' , () async {
@@ -172,18 +177,21 @@ void main() {
172
177
});
173
178
174
179
test ('Decode Numeric to String' , () {
175
- // -123400000.2
176
- final binary1 = [0 , 4 , 0 , 2 , 64 , 0 , 0 , 5 , 0 , 1 , 9 , 36 , 0 , 0 , 7 , 208 ];
177
-
178
- // -123400001.01234
179
- final binary2 = [0 , 5 , 0 , 2 , 64 , 0 , 0 , 5 , 0 , 1 , 9 , 36 , 0 , 1 , 0 , 0 , 7 , 208 ];
180
+ final binaries = {
181
+ '-123400000.20000' : [0 , 4 , 0 , 2 , 64 , 0 , 0 , 5 , 0 , 1 , 9 , 36 , 0 , 0 , 7 , 208 ],
182
+ '-123400001.00002' : [0 , 5 , 0 , 2 , 64 , 0 , 0 , 5 , 0 , 1 , 9 , 36 , 0 , 1 , 0 , 0 , 7 , 208 ],
183
+ '0.00001' : [0 , 1 , 255 , 254 , 0 , 0 , 0 , 5 , 3 , 232 ],
184
+ '10000.000000000' : [0 , 1 , 0 , 1 , 0 , 0 , 0 , 9 , 0 , 1 ],
185
+ 'NaN' : [0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 ],
186
+ '0' : [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ], // 0 or 0.
187
+ '0.0' : [0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ], // .0 or 0.0
188
+ };
180
189
181
190
final decoder = PostgresBinaryDecoder (1700 );
182
- final uint8List1 = Uint8List .fromList (binary1);
183
- final uint8List2 = Uint8List .fromList (binary2);
184
- final res1 = decoder.convert (uint8List1);
185
- final res2 = decoder.convert (uint8List2);
186
- expect (res1, '-123400000.20000' );
187
- expect (res2, '-123400001.00002' );
191
+ binaries.forEach ((key, value) {
192
+ final uint8List = Uint8List .fromList (value);
193
+ final res = decoder.convert (uint8List);
194
+ expect (res, key);
195
+ });
188
196
});
189
197
}
0 commit comments