-- -- FLOAT4 -- --Testcase 46: CREATE EXTENSION sqlite_fdw; --Testcase 47: CREATE SERVER sqlite_svr FOREIGN DATA WRAPPER sqlite_fdw OPTIONS (database '/tmp/sqlite_fdw_test/core.db'); --Testcase 48: CREATE FOREIGN TABLE FLOAT4_TBL(f1 float4 OPTIONS (key 'true')) SERVER sqlite_svr; --Testcase 49: CREATE FOREIGN TABLE FLOAT4_TMP(f1 float4, id int OPTIONS (key 'true')) SERVER sqlite_svr; --Testcase 1: INSERT INTO FLOAT4_TBL(f1) VALUES (' 0.0'); --Testcase 2: INSERT INTO FLOAT4_TBL(f1) VALUES ('1004.30 '); --Testcase 3: INSERT INTO FLOAT4_TBL(f1) VALUES (' -34.84 '); --Testcase 4: INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e+20'); --Testcase 5: INSERT INTO FLOAT4_TBL(f1) VALUES ('1.2345678901234e-20'); -- test for over and under flow --Testcase 6: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'); ERROR: "10e70" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'); ^ --Testcase 7: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'); ERROR: "-10e70" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'); ^ --Testcase 8: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'); ERROR: "10e-70" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'); ^ --Testcase 9: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'); ERROR: "-10e-70" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'); ^ --Testcase 50: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e70'::float8); ERROR: value out of range: overflow --Testcase 51: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e70'::float8); ERROR: value out of range: overflow --Testcase 52: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-70'::float8); ERROR: value out of range: underflow --Testcase 53: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-70'::float8); ERROR: value out of range: underflow --Testcase 54: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400'); ERROR: "10e400" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e400'); ^ --Testcase 55: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400'); ERROR: "-10e400" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e400'); ^ --Testcase 56: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400'); ERROR: "10e-400" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('10e-400'); ^ --Testcase 57: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400'); ERROR: "-10e-400" is out of range for type real LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('-10e-400'); ^ -- bad input --Testcase 10: INSERT INTO FLOAT4_TBL(f1) VALUES (''); ERROR: invalid input syntax for type real: "" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (''); ^ --Testcase 11: INSERT INTO FLOAT4_TBL(f1) VALUES (' '); ERROR: invalid input syntax for type real: " " LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (' '); ^ --Testcase 12: INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz'); ERROR: invalid input syntax for type real: "xyz" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('xyz'); ^ --Testcase 13: INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0'); ERROR: invalid input syntax for type real: "5.0.0" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5.0.0'); ^ --Testcase 14: INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0'); ERROR: invalid input syntax for type real: "5 . 0" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5 . 0'); ^ --Testcase 15: INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0'); ERROR: invalid input syntax for type real: "5. 0" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('5. 0'); ^ --Testcase 16: INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0'); ERROR: invalid input syntax for type real: " - 3.0" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES (' - 3.0'); ^ --Testcase 17: INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5'); ERROR: invalid input syntax for type real: "123 5" LINE 1: INSERT INTO FLOAT4_TBL(f1) VALUES ('123 5'); ^ -- Also try it with non-error-throwing API CREATE FOREIGN TABLE NON_ERROR_THROWING_API_FLOAT4(f1 text, id serial OPTIONS (key 'true')) SERVER sqlite_svr; INSERT INTO NON_ERROR_THROWING_API_FLOAT4 VALUES ('34.5', 1), ('xyz', 2), ('1e400', 3); SELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 1; pg_input_is_valid ------------------- t (1 row) SELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 2; pg_input_is_valid ------------------- f (1 row) SELECT pg_input_is_valid(f1, 'float4') FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3; pg_input_is_valid ------------------- f (1 row) SELECT * FROM pg_input_error_info((SELECT f1 FROM NON_ERROR_THROWING_API_FLOAT4 WHERE id = 3), 'float4'); message | detail | hint | sql_error_code ---------------------------------------+--------+------+---------------- "1e400" is out of range for type real | | | 22003 (1 row) -- special inputs --Testcase 18: DELETE FROM FLOAT4_TMP; --Testcase 58: INSERT INTO FLOAT4_TMP VALUES ('NaN'::float4); --Testcase 59: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 20: DELETE FROM FLOAT4_TMP; --Testcase 60: INSERT INTO FLOAT4_TMP VALUES ('nan'::float4); --Testcase 61: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 21: DELETE FROM FLOAT4_TMP; --Testcase 62: INSERT INTO FLOAT4_TMP VALUES (' NAN '::float4); --Testcase 63: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 22: DELETE FROM FLOAT4_TMP; --Testcase 64: INSERT INTO FLOAT4_TMP VALUES ('infinity'::float4); --Testcase 65: SELECT f1 FROM FLOAT4_TMP; f1 ---------- Infinity (1 row) --Testcase 23: DELETE FROM FLOAT4_TMP; --Testcase 66: INSERT INTO FLOAT4_TMP VALUES (' -INFINiTY '::float4); --Testcase 67: SELECT f1 FROM FLOAT4_TMP; f1 ----------- -Infinity (1 row) -- bad special inputs --Testcase 25: DELETE FROM FLOAT4_TMP; --Testcase 68: INSERT INTO FLOAT4_TMP VALUES ('N A N'::float4); ERROR: invalid input syntax for type real: "N A N" LINE 1: INSERT INTO FLOAT4_TMP VALUES ('N A N'::float4); ^ --Testcase 69: SELECT f1 FROM FLOAT4_TMP; f1 ---- (0 rows) --Testcase 26: DELETE FROM FLOAT4_TMP; --Testcase 70: INSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4); ERROR: invalid input syntax for type real: "NaN x" LINE 1: INSERT INTO FLOAT4_TMP VALUES ('NaN x'::float4); ^ --Testcase 71: SELECT f1 FROM FLOAT4_TMP; f1 ---- (0 rows) --Testcase 27: DELETE FROM FLOAT4_TMP; --Testcase 72: INSERT INTO FLOAT4_TMP VALUES (' INFINITY x'::float4); ERROR: invalid input syntax for type real: " INFINITY x" LINE 1: INSERT INTO FLOAT4_TMP VALUES (' INFINITY x'::float4); ^ --Testcase 73: SELECT f1 FROM FLOAT4_TMP; f1 ---- (0 rows) --Testcase 28: DELETE FROM FLOAT4_TMP; --Testcase 74: INSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 + 100.0); --Testcase 75: SELECT f1 FROM FLOAT4_TMP; f1 ---------- Infinity (1 row) --Testcase 30: DELETE FROM FLOAT4_TMP; --Testcase 76: INSERT INTO FLOAT4_TMP VALUES ('Infinity'::float4 / 'Infinity'::float4); --Testcase 77: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 185: DELETE FROM FLOAT4_TMP; --Testcase 186: INSERT INTO FLOAT4_TMP VALUES ('42'::float4 / 'Infinity'::float4); --Testcase 187: SELECT f1 FROM FLOAT4_TMP; f1 ---- 0 (1 row) --Testcase 31: DELETE FROM FLOAT4_TMP; --Testcase 78: INSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / 'nan'::float4); --Testcase 79: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 188: DELETE FROM FLOAT4_TMP; --Testcase 189: INSERT INTO FLOAT4_TMP VALUES ('nan'::float4 / '0'::float4); --Testcase 190: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 32: DELETE FROM FLOAT4_TMP; --Testcase 80: INSERT INTO FLOAT4_TMP VALUES ('nan'::numeric::float4); --Testcase 81: SELECT f1 FROM FLOAT4_TMP; f1 ---- (1 row) --Testcase 34: SELECT * FROM FLOAT4_TBL; f1 --------------- 0 1004.3 -34.84 1.2345679e+20 1.2345679e-20 (5 rows) --SELECT '' AS four, f.* FROM FLOAT4_TBL f WHERE f.f1 <> '1004.3'; --SELECT '' AS one, f.* FROM FLOAT4_TBL f WHERE f.f1 = '1004.3'; --SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE '1004.3' > f.f1; --SELECT '' AS three, f.* FROM FLOAT4_TBL f WHERE f.f1 < '1004.3'; --Testcase 35: SELECT f.* FROM FLOAT4_TBL f WHERE '1004.3' >= f.f1; f1 --------------- 0 1004.3 -34.84 1.2345679e-20 (4 rows) --Testcase 36: SELECT f.* FROM FLOAT4_TBL f WHERE f.f1 <= '1004.3'; f1 --------------- 0 1004.3 -34.84 1.2345679e-20 (4 rows) --Testcase 37: SELECT f.f1, f.f1 * '-10' AS x FROM FLOAT4_TBL f WHERE f.f1 > '0.0'; f1 | x ---------------+---------------- 1004.3 | -10043 1.2345679e+20 | -1.2345678e+21 1.2345679e-20 | -1.2345678e-19 (3 rows) --Testcase 38: SELECT f.f1, f.f1 + '-10' AS x FROM FLOAT4_TBL f WHERE f.f1 > '0.0'; f1 | x ---------------+--------------- 1004.3 | 994.3 1.2345679e+20 | 1.2345679e+20 1.2345679e-20 | -10 (3 rows) --Testcase 39: SELECT f.f1, f.f1 / '-10' AS x FROM FLOAT4_TBL f WHERE f.f1 > '0.0'; f1 | x ---------------+---------------- 1004.3 | -100.43 1.2345679e+20 | -1.2345679e+19 1.2345679e-20 | -1.2345679e-21 (3 rows) --Testcase 40: SELECT f.f1, f.f1 - '-10' AS x FROM FLOAT4_TBL f WHERE f.f1 > '0.0'; f1 | x ---------------+--------------- 1004.3 | 1014.3 1.2345679e+20 | 1.2345679e+20 1.2345679e-20 | 10 (3 rows) -- test divide by zero --Testcase 41: SELECT f.f1 / '0.0' from FLOAT4_TBL f; ERROR: division by zero --Testcase 42: SELECT * FROM FLOAT4_TBL; f1 --------------- 0 1004.3 -34.84 1.2345679e+20 1.2345679e-20 (5 rows) -- test the unary float4abs operator --Testcase 43: SELECT f.f1, @f.f1 AS abs_f1 FROM FLOAT4_TBL f; f1 | abs_f1 ---------------+--------------- 0 | 0 1004.3 | 1004.3 -34.84 | 34.84 1.2345679e+20 | 1.2345679e+20 1.2345679e-20 | 1.2345679e-20 (5 rows) --Testcase 44: UPDATE FLOAT4_TBL SET f1 = FLOAT4_TBL.f1 * '-1' WHERE FLOAT4_TBL.f1 > '0.0'; --Testcase 45: SELECT * FROM FLOAT4_TBL; f1 ---------------- 0 -1004.3 -34.84 -1.2345679e+20 -1.2345679e-20 (5 rows) -- test edge-case coercions to integer --Testcase 82: DELETE FROM FLOAT4_TMP; --Testcase 83: INSERT INTO FLOAT4_TMP VALUES ('32767.4'::float4); --Testcase 84: SELECT f1::int2 FROM FLOAT4_TMP; f1 ------- 32767 (1 row) --Testcase 85: DELETE FROM FLOAT4_TMP; --Testcase 86: INSERT INTO FLOAT4_TMP VALUES ('32767.6'::float4); --Testcase 87: SELECT f1::int2 FROM FLOAT4_TMP; ERROR: smallint out of range --Testcase 88: DELETE FROM FLOAT4_TMP; --Testcase 89: INSERT INTO FLOAT4_TMP VALUES ('-32768.4'::float4); --Testcase 90: SELECT f1::int2 FROM FLOAT4_TMP; f1 -------- -32768 (1 row) --Testcase 91: DELETE FROM FLOAT4_TMP; --Testcase 92: INSERT INTO FLOAT4_TMP VALUES ('-32768.6'::float4); --Testcase 93: SELECT f1::int2 FROM FLOAT4_TMP; ERROR: smallint out of range --Testcase 94: DELETE FROM FLOAT4_TMP; --Testcase 95: INSERT INTO FLOAT4_TMP VALUES ('2147483520'::float4); --Testcase 96: SELECT f1::int4 FROM FLOAT4_TMP; f1 ------------ 2147483520 (1 row) --Testcase 97: DELETE FROM FLOAT4_TMP; --Testcase 98: INSERT INTO FLOAT4_TMP VALUES ('2147483647'::float4); --Testcase 99: SELECT f1::int4 FROM FLOAT4_TMP; ERROR: integer out of range --Testcase 100: DELETE FROM FLOAT4_TMP; --Testcase 101: INSERT INTO FLOAT4_TMP VALUES ('-2147483648.5'::float4); --Testcase 102: SELECT f1::int4 FROM FLOAT4_TMP; f1 ------------- -2147483648 (1 row) --Testcase 103: DELETE FROM FLOAT4_TMP; --Testcase 104: INSERT INTO FLOAT4_TMP VALUES ('-2147483900'::float4); --Testcase 105: SELECT f1::int4 FROM FLOAT4_TMP; ERROR: integer out of range --Testcase 106: DELETE FROM FLOAT4_TMP; --Testcase 107: INSERT INTO FLOAT4_TMP VALUES ('9223369837831520256'::float4); --Testcase 108: SELECT f1::int8 FROM FLOAT4_TMP; f1 --------------------- 9223369837831520256 (1 row) --Testcase 109: DELETE FROM FLOAT4_TMP; --Testcase 110: INSERT INTO FLOAT4_TMP VALUES ('9223372036854775807'::float4); --Testcase 111: SELECT f1::int8 FROM FLOAT4_TMP; ERROR: bigint out of range --Testcase 112: DELETE FROM FLOAT4_TMP; --Testcase 113: INSERT INTO FLOAT4_TMP VALUES ('-9223372036854775808.5'::float4); --Testcase 114: SELECT f1::int8 FROM FLOAT4_TMP; f1 ---------------------- -9223372036854775808 (1 row) --Testcase 115: DELETE FROM FLOAT4_TMP; --Testcase 116: INSERT INTO FLOAT4_TMP VALUES ('-9223380000000000000'::float4); --Testcase 117: SELECT f1::int8 FROM FLOAT4_TMP; ERROR: bigint out of range -- Test for correct input rounding in edge cases. -- These lists are from Paxson 1991, excluding subnormals and -- inputs of over 9 sig. digits. --Testcase 118: DELETE FROM FLOAT4_TMP; --Testcase 119: INSERT INTO FLOAT4_TMP VALUES ('5e-20'::float4); --Testcase 120: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x1f6c1e4a (1 row) --Testcase 121: DELETE FROM FLOAT4_TMP; --Testcase 122: INSERT INTO FLOAT4_TMP VALUES ('67e14'::float4); --Testcase 123: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x59be6cea (1 row) --Testcase 124: DELETE FROM FLOAT4_TMP; --Testcase 125: INSERT INTO FLOAT4_TMP VALUES ('985e15'::float4); --Testcase 126: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x5d5ab6c4 (1 row) --Testcase 127: DELETE FROM FLOAT4_TMP; --Testcase 128: INSERT INTO FLOAT4_TMP VALUES ('55895e-16'::float4); --Testcase 129: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x2cc4a9bd (1 row) --Testcase 130: DELETE FROM FLOAT4_TMP; --Testcase 131: INSERT INTO FLOAT4_TMP VALUES ('7038531e-32'::float4); --Testcase 132: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x15ae43fd (1 row) --Testcase 133: DELETE FROM FLOAT4_TMP; --Testcase 134: INSERT INTO FLOAT4_TMP VALUES ('702990899e-20'::float4); --Testcase 135: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x2cf757ca (1 row) --Testcase 136: DELETE FROM FLOAT4_TMP; --Testcase 137: INSERT INTO FLOAT4_TMP VALUES ('3e-23'::float4); --Testcase 138: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x1a111234 (1 row) --Testcase 139: DELETE FROM FLOAT4_TMP; --Testcase 140: INSERT INTO FLOAT4_TMP VALUES ('57e18'::float4); --Testcase 141: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x6045c22c (1 row) --Testcase 142: DELETE FROM FLOAT4_TMP; --Testcase 143: INSERT INTO FLOAT4_TMP VALUES ('789e-35'::float4); --Testcase 144: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x0a23de70 (1 row) --Testcase 145: DELETE FROM FLOAT4_TMP; --Testcase 146: INSERT INTO FLOAT4_TMP VALUES ('2539e-18'::float4); --Testcase 147: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x2736f449 (1 row) --Testcase 148: DELETE FROM FLOAT4_TMP; --Testcase 149: INSERT INTO FLOAT4_TMP VALUES ('76173e28'::float4); --Testcase 150: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x7616398a (1 row) --Testcase 151: DELETE FROM FLOAT4_TMP; --Testcase 152: INSERT INTO FLOAT4_TMP VALUES ('887745e-11'::float4); --Testcase 153: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x3714f05c (1 row) --Testcase 154: DELETE FROM FLOAT4_TMP; --Testcase 155: INSERT INTO FLOAT4_TMP VALUES ('5382571e-37'::float4); --Testcase 156: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x0d2eaca7 (1 row) --Testcase 157: DELETE FROM FLOAT4_TMP; --Testcase 158: INSERT INTO FLOAT4_TMP VALUES ('82381273e-35'::float4); --Testcase 159: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x128289d1 (1 row) --Testcase 160: DELETE FROM FLOAT4_TMP; --Testcase 161: INSERT INTO FLOAT4_TMP VALUES ('750486563e-38'::float4); --Testcase 162: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x0f18377e (1 row) -- Test that the smallest possible normalized input value inputs -- correctly, either in 9-significant-digit or shortest-decimal -- format. -- -- exact val is 1.1754943508... -- shortest val is 1.1754944000 -- midpoint to next val is 1.1754944208... --Testcase 163: DELETE FROM FLOAT4_TMP; --Testcase 164: INSERT INTO FLOAT4_TMP VALUES ('1.17549435e-38'::float4); --Testcase 165: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x00800000 (1 row) --Testcase 166: DELETE FROM FLOAT4_TMP; --Testcase 167: INSERT INTO FLOAT4_TMP VALUES('1.1754944e-38'::float4); --Testcase 168: SELECT float4send(f1) FROM FLOAT4_TMP; float4send ------------ \x00800000 (1 row) -- test output (and round-trip safety) of various values. -- To ensure we're testing what we think we're testing, start with -- float values specified by bit patterns (as a useful side effect, -- this means we'll fail on non-IEEE platforms). --Testcase 169: create type xfloat4; --Testcase 170: create function xfloat4in(cstring) returns xfloat4 immutable strict language internal as 'int4in'; NOTICE: return type xfloat4 is only a shell --Testcase 171: create function xfloat4out(xfloat4) returns cstring immutable strict language internal as 'int4out'; NOTICE: argument type xfloat4 is only a shell --Testcase 172: create type xfloat4 (input = xfloat4in, output = xfloat4out, like = float4); --Testcase 173: create cast (xfloat4 as float4) without function; --Testcase 174: create cast (float4 as xfloat4) without function; --Testcase 175: create cast (xfloat4 as integer) without function; --Testcase 176: create cast (integer as xfloat4) without function; -- float4: seeeeeee emmmmmmm mmmmmmmm mmmmmmmm -- we don't care to assume the platform's strtod() handles subnormals -- correctly; those are "use at your own risk". However we do test -- subnormal outputs, since those are under our control. --Testcase 177: create foreign table testdata(bits text, id int OPTIONS (key 'true')) server sqlite_svr; begin; --Testcase 178: insert into testdata(bits) values -- small subnormals (x'00000001'), (x'00000002'), (x'00000003'), (x'00000010'), (x'00000011'), (x'00000100'), (x'00000101'), (x'00004000'), (x'00004001'), (x'00080000'), (x'00080001'), -- stress values (x'0053c4f4'), -- 7693e-42 (x'006c85c4'), -- 996622e-44 (x'0041ca76'), -- 60419369e-46 (x'004b7678'), -- 6930161142e-48 -- taken from upstream testsuite (x'00000007'), (x'00424fe2'), -- borderline between subnormal and normal (x'007ffff0'), (x'007ffff1'), (x'007ffffe'), (x'007fffff'); --Testcase 179: select float4send(flt) as ibits, flt from (select bits::bit(32)::integer::xfloat4::float4 as flt from testdata offset 0) s; ibits | flt ------------+--------------- \x00000001 | 1e-45 \x00000002 | 3e-45 \x00000003 | 4e-45 \x00000010 | 2.2e-44 \x00000011 | 2.4e-44 \x00000100 | 3.59e-43 \x00000101 | 3.6e-43 \x00004000 | 2.2959e-41 \x00004001 | 2.296e-41 \x00080000 | 7.34684e-40 \x00080001 | 7.34685e-40 \x0053c4f4 | 7.693e-39 \x006c85c4 | 9.96622e-39 \x0041ca76 | 6.041937e-39 \x004b7678 | 6.930161e-39 \x00000007 | 1e-44 \x00424fe2 | 6.0898e-39 \x007ffff0 | 1.1754921e-38 \x007ffff1 | 1.1754922e-38 \x007ffffe | 1.1754941e-38 \x007fffff | 1.1754942e-38 (21 rows) rollback; begin; --Testcase 180: insert into testdata(bits) values (x'00000000'), -- smallest normal values (x'00800000'), (x'00800001'), (x'00800004'), (x'00800005'), (x'00800006'), -- small normal values chosen for short vs. long output (x'008002f1'), (x'008002f2'), (x'008002f3'), (x'00800e17'), (x'00800e18'), (x'00800e19'), -- assorted values (random mantissae) (x'01000001'), (x'01102843'), (x'01a52c98'), (x'0219c229'), (x'02e4464d'), (x'037343c1'), (x'03a91b36'), (x'047ada65'), (x'0496fe87'), (x'0550844f'), (x'05999da3'), (x'060ea5e2'), (x'06e63c45'), (x'07f1e548'), (x'0fc5282b'), (x'1f850283'), (x'2874a9d6'), -- values around 5e-08 (x'3356bf94'), (x'3356bf95'), (x'3356bf96'), -- around 1e-07 (x'33d6bf94'), (x'33d6bf95'), (x'33d6bf96'), -- around 3e-07 .. 1e-04 (x'34a10faf'), (x'34a10fb0'), (x'34a10fb1'), (x'350637bc'), (x'350637bd'), (x'350637be'), (x'35719786'), (x'35719787'), (x'35719788'), (x'358637bc'), (x'358637bd'), (x'358637be'), (x'36a7c5ab'), (x'36a7c5ac'), (x'36a7c5ad'), (x'3727c5ab'), (x'3727c5ac'), (x'3727c5ad'), -- format crossover at 1e-04 (x'38d1b714'), (x'38d1b715'), (x'38d1b716'), (x'38d1b717'), (x'38d1b718'), (x'38d1b719'), (x'38d1b71a'), (x'38d1b71b'), (x'38d1b71c'), (x'38d1b71d'), -- (x'38dffffe'), (x'38dfffff'), (x'38e00000'), (x'38efffff'), (x'38f00000'), (x'38f00001'), (x'3a83126e'), (x'3a83126f'), (x'3a831270'), (x'3c23d709'), (x'3c23d70a'), (x'3c23d70b'), (x'3dcccccc'), (x'3dcccccd'), (x'3dccccce'), -- chosen to need 9 digits for 3dcccd70 (x'3dcccd6f'), (x'3dcccd70'), (x'3dcccd71'), -- (x'3effffff'), (x'3f000000'), (x'3f000001'), (x'3f333332'), (x'3f333333'), (x'3f333334'), -- approach 1.0 with increasing numbers of 9s (x'3f666665'), (x'3f666666'), (x'3f666667'), (x'3f7d70a3'), (x'3f7d70a4'), (x'3f7d70a5'), (x'3f7fbe76'), (x'3f7fbe77'), (x'3f7fbe78'), (x'3f7ff971'), (x'3f7ff972'), (x'3f7ff973'), (x'3f7fff57'), (x'3f7fff58'), (x'3f7fff59'), (x'3f7fffee'), (x'3f7fffef'), -- values very close to 1 (x'3f7ffff0'), (x'3f7ffff1'), (x'3f7ffff2'), (x'3f7ffff3'), (x'3f7ffff4'), (x'3f7ffff5'), (x'3f7ffff6'), (x'3f7ffff7'), (x'3f7ffff8'), (x'3f7ffff9'), (x'3f7ffffa'), (x'3f7ffffb'), (x'3f7ffffc'), (x'3f7ffffd'), (x'3f7ffffe'), (x'3f7fffff'), (x'3f800000'), (x'3f800001'), (x'3f800002'), (x'3f800003'), (x'3f800004'), (x'3f800005'), (x'3f800006'), (x'3f800007'), (x'3f800008'), (x'3f800009'), -- values 1 to 1.1 (x'3f80000f'), (x'3f800010'), (x'3f800011'), (x'3f800012'), (x'3f800013'), (x'3f800014'), (x'3f800017'), (x'3f800018'), (x'3f800019'), (x'3f80001a'), (x'3f80001b'), (x'3f80001c'), (x'3f800029'), (x'3f80002a'), (x'3f80002b'), (x'3f800053'), (x'3f800054'), (x'3f800055'), (x'3f800346'), (x'3f800347'), (x'3f800348'), (x'3f8020c4'), (x'3f8020c5'), (x'3f8020c6'), (x'3f8147ad'), (x'3f8147ae'), (x'3f8147af'), (x'3f8ccccc'), (x'3f8ccccd'), (x'3f8cccce'), -- (x'3fc90fdb'), -- pi/2 (x'402df854'), -- e (x'40490fdb'), -- pi -- (x'409fffff'), (x'40a00000'), (x'40a00001'), (x'40afffff'), (x'40b00000'), (x'40b00001'), (x'411fffff'), (x'41200000'), (x'41200001'), (x'42c7ffff'), (x'42c80000'), (x'42c80001'), (x'4479ffff'), (x'447a0000'), (x'447a0001'), (x'461c3fff'), (x'461c4000'), (x'461c4001'), (x'47c34fff'), (x'47c35000'), (x'47c35001'), (x'497423ff'), (x'49742400'), (x'49742401'), (x'4b18967f'), (x'4b189680'), (x'4b189681'), (x'4cbebc1f'), (x'4cbebc20'), (x'4cbebc21'), (x'4e6e6b27'), (x'4e6e6b28'), (x'4e6e6b29'), (x'501502f8'), (x'501502f9'), (x'501502fa'), (x'51ba43b6'), (x'51ba43b7'), (x'51ba43b8'), -- stress values (x'1f6c1e4a'), -- 5e-20 (x'59be6cea'), -- 67e14 (x'5d5ab6c4'), -- 985e15 (x'2cc4a9bd'), -- 55895e-16 (x'15ae43fd'), -- 7038531e-32 (x'2cf757ca'), -- 702990899e-20 (x'665ba998'), -- 25933168707e13 (x'743c3324'), -- 596428896559e20 -- exercise fixed-point memmoves (x'47f1205a'), (x'4640e6ae'), (x'449a5225'), (x'42f6e9d5'), (x'414587dd'), (x'3f9e064b'), -- these cases come from the upstream's testsuite -- BoundaryRoundEven (x'4c000004'), (x'50061c46'), (x'510006a8'), -- ExactValueRoundEven (x'48951f84'), (x'45fd1840'), -- LotsOfTrailingZeros (x'39800000'), (x'3b200000'), (x'3b900000'), (x'3bd00000'), -- Regression (x'63800000'), (x'4b000000'), (x'4b800000'), (x'4c000001'), (x'4c800b0d'), (x'00d24584'), (x'00d90b88'), (x'45803f34'), (x'4f9f24f7'), (x'3a8722c3'), (x'5c800041'), (x'15ae43fd'), (x'5d4cccfb'), (x'4c800001'), (x'57800ed8'), (x'5f000000'), (x'700000f0'), (x'5f23e9ac'), (x'5e9502f9'), (x'5e8012b1'), (x'3c000028'), (x'60cde861'), (x'03aa2a50'), (x'43480000'), (x'4c000000'), -- LooksLikePow5 (x'5D1502F9'), (x'5D9502F9'), (x'5E1502F9'), -- OutputLength (x'3f99999a'), (x'3f9d70a4'), (x'3f9df3b6'), (x'3f9e0419'), (x'3f9e0610'), (x'3f9e064b'), (x'3f9e0651'), (x'03d20cfe'); --Testcase 181: select float4send(flt) as ibits, flt, flt::text::float4 as r_flt, float4send(flt::text::float4) as obits, float4send(flt::text::float4) = float4send(flt) as correct from (select bits::bit(32)::integer::xfloat4::float4 as flt from testdata offset 0) s; ibits | flt | r_flt | obits | correct ------------+----------------+----------------+------------+--------- \x00000000 | 0 | 0 | \x00000000 | t \x00800000 | 1.1754944e-38 | 1.1754944e-38 | \x00800000 | t \x00800001 | 1.1754945e-38 | 1.1754945e-38 | \x00800001 | t \x00800004 | 1.1754949e-38 | 1.1754949e-38 | \x00800004 | t \x00800005 | 1.175495e-38 | 1.175495e-38 | \x00800005 | t \x00800006 | 1.1754952e-38 | 1.1754952e-38 | \x00800006 | t \x008002f1 | 1.1755999e-38 | 1.1755999e-38 | \x008002f1 | t \x008002f2 | 1.1756e-38 | 1.1756e-38 | \x008002f2 | t \x008002f3 | 1.1756001e-38 | 1.1756001e-38 | \x008002f3 | t \x00800e17 | 1.1759998e-38 | 1.1759998e-38 | \x00800e17 | t \x00800e18 | 1.176e-38 | 1.176e-38 | \x00800e18 | t \x00800e19 | 1.1760001e-38 | 1.1760001e-38 | \x00800e19 | t \x01000001 | 2.350989e-38 | 2.350989e-38 | \x01000001 | t \x01102843 | 2.647751e-38 | 2.647751e-38 | \x01102843 | t \x01a52c98 | 6.0675416e-38 | 6.0675416e-38 | \x01a52c98 | t \x0219c229 | 1.1296386e-37 | 1.1296386e-37 | \x0219c229 | t \x02e4464d | 3.354194e-37 | 3.354194e-37 | \x02e4464d | t \x037343c1 | 7.148906e-37 | 7.148906e-37 | \x037343c1 | t \x03a91b36 | 9.939175e-37 | 9.939175e-37 | \x03a91b36 | t \x047ada65 | 2.948764e-36 | 2.948764e-36 | \x047ada65 | t \x0496fe87 | 3.5498577e-36 | 3.5498577e-36 | \x0496fe87 | t \x0550844f | 9.804414e-36 | 9.804414e-36 | \x0550844f | t \x05999da3 | 1.4445957e-35 | 1.4445957e-35 | \x05999da3 | t \x060ea5e2 | 2.6829103e-35 | 2.6829103e-35 | \x060ea5e2 | t \x06e63c45 | 8.660494e-35 | 8.660494e-35 | \x06e63c45 | t \x07f1e548 | 3.639641e-34 | 3.639641e-34 | \x07f1e548 | t \x0fc5282b | 1.9441172e-29 | 1.9441172e-29 | \x0fc5282b | t \x1f850283 | 5.6331846e-20 | 5.6331846e-20 | \x1f850283 | t \x2874a9d6 | 1.3581548e-14 | 1.3581548e-14 | \x2874a9d6 | t \x3356bf94 | 4.9999997e-08 | 4.9999997e-08 | \x3356bf94 | t \x3356bf95 | 5e-08 | 5e-08 | \x3356bf95 | t \x3356bf96 | 5.0000004e-08 | 5.0000004e-08 | \x3356bf96 | t \x33d6bf94 | 9.9999994e-08 | 9.9999994e-08 | \x33d6bf94 | t \x33d6bf95 | 1e-07 | 1e-07 | \x33d6bf95 | t \x33d6bf96 | 1.0000001e-07 | 1.0000001e-07 | \x33d6bf96 | t \x34a10faf | 2.9999998e-07 | 2.9999998e-07 | \x34a10faf | t \x34a10fb0 | 3e-07 | 3e-07 | \x34a10fb0 | t \x34a10fb1 | 3.0000004e-07 | 3.0000004e-07 | \x34a10fb1 | t \x350637bc | 4.9999994e-07 | 4.9999994e-07 | \x350637bc | t \x350637bd | 5e-07 | 5e-07 | \x350637bd | t \x350637be | 5.0000006e-07 | 5.0000006e-07 | \x350637be | t \x35719786 | 8.999999e-07 | 8.999999e-07 | \x35719786 | t \x35719787 | 9e-07 | 9e-07 | \x35719787 | t \x35719788 | 9.0000003e-07 | 9.0000003e-07 | \x35719788 | t \x358637bc | 9.999999e-07 | 9.999999e-07 | \x358637bc | t \x358637bd | 1e-06 | 1e-06 | \x358637bd | t \x358637be | 1.0000001e-06 | 1.0000001e-06 | \x358637be | t \x36a7c5ab | 4.9999994e-06 | 4.9999994e-06 | \x36a7c5ab | t \x36a7c5ac | 5e-06 | 5e-06 | \x36a7c5ac | t \x36a7c5ad | 5.0000003e-06 | 5.0000003e-06 | \x36a7c5ad | t \x3727c5ab | 9.999999e-06 | 9.999999e-06 | \x3727c5ab | t \x3727c5ac | 1e-05 | 1e-05 | \x3727c5ac | t \x3727c5ad | 1.0000001e-05 | 1.0000001e-05 | \x3727c5ad | t \x38d1b714 | 9.9999976e-05 | 9.9999976e-05 | \x38d1b714 | t \x38d1b715 | 9.999998e-05 | 9.999998e-05 | \x38d1b715 | t \x38d1b716 | 9.999999e-05 | 9.999999e-05 | \x38d1b716 | t \x38d1b717 | 0.0001 | 0.0001 | \x38d1b717 | t \x38d1b718 | 0.000100000005 | 0.000100000005 | \x38d1b718 | t \x38d1b719 | 0.00010000001 | 0.00010000001 | \x38d1b719 | t \x38d1b71a | 0.00010000002 | 0.00010000002 | \x38d1b71a | t \x38d1b71b | 0.00010000003 | 0.00010000003 | \x38d1b71b | t \x38d1b71c | 0.000100000034 | 0.000100000034 | \x38d1b71c | t \x38d1b71d | 0.00010000004 | 0.00010000004 | \x38d1b71d | t \x38dffffe | 0.00010681151 | 0.00010681151 | \x38dffffe | t \x38dfffff | 0.000106811516 | 0.000106811516 | \x38dfffff | t \x38e00000 | 0.00010681152 | 0.00010681152 | \x38e00000 | t \x38efffff | 0.00011444091 | 0.00011444091 | \x38efffff | t \x38f00000 | 0.00011444092 | 0.00011444092 | \x38f00000 | t \x38f00001 | 0.000114440925 | 0.000114440925 | \x38f00001 | t \x3a83126e | 0.0009999999 | 0.0009999999 | \x3a83126e | t \x3a83126f | 0.001 | 0.001 | \x3a83126f | t \x3a831270 | 0.0010000002 | 0.0010000002 | \x3a831270 | t \x3c23d709 | 0.009999999 | 0.009999999 | \x3c23d709 | t \x3c23d70a | 0.01 | 0.01 | \x3c23d70a | t \x3c23d70b | 0.010000001 | 0.010000001 | \x3c23d70b | t \x3dcccccc | 0.099999994 | 0.099999994 | \x3dcccccc | t \x3dcccccd | 0.1 | 0.1 | \x3dcccccd | t \x3dccccce | 0.10000001 | 0.10000001 | \x3dccccce | t \x3dcccd6f | 0.10000121 | 0.10000121 | \x3dcccd6f | t \x3dcccd70 | 0.100001216 | 0.100001216 | \x3dcccd70 | t \x3dcccd71 | 0.10000122 | 0.10000122 | \x3dcccd71 | t \x3effffff | 0.49999997 | 0.49999997 | \x3effffff | t \x3f000000 | 0.5 | 0.5 | \x3f000000 | t \x3f000001 | 0.50000006 | 0.50000006 | \x3f000001 | t \x3f333332 | 0.6999999 | 0.6999999 | \x3f333332 | t \x3f333333 | 0.7 | 0.7 | \x3f333333 | t \x3f333334 | 0.70000005 | 0.70000005 | \x3f333334 | t \x3f666665 | 0.8999999 | 0.8999999 | \x3f666665 | t \x3f666666 | 0.9 | 0.9 | \x3f666666 | t \x3f666667 | 0.90000004 | 0.90000004 | \x3f666667 | t \x3f7d70a3 | 0.98999995 | 0.98999995 | \x3f7d70a3 | t \x3f7d70a4 | 0.99 | 0.99 | \x3f7d70a4 | t \x3f7d70a5 | 0.99000007 | 0.99000007 | \x3f7d70a5 | t \x3f7fbe76 | 0.99899995 | 0.99899995 | \x3f7fbe76 | t \x3f7fbe77 | 0.999 | 0.999 | \x3f7fbe77 | t \x3f7fbe78 | 0.9990001 | 0.9990001 | \x3f7fbe78 | t \x3f7ff971 | 0.9998999 | 0.9998999 | \x3f7ff971 | t \x3f7ff972 | 0.9999 | 0.9999 | \x3f7ff972 | t \x3f7ff973 | 0.99990004 | 0.99990004 | \x3f7ff973 | t \x3f7fff57 | 0.9999899 | 0.9999899 | \x3f7fff57 | t \x3f7fff58 | 0.99999 | 0.99999 | \x3f7fff58 | t \x3f7fff59 | 0.99999005 | 0.99999005 | \x3f7fff59 | t \x3f7fffee | 0.9999989 | 0.9999989 | \x3f7fffee | t \x3f7fffef | 0.999999 | 0.999999 | \x3f7fffef | t \x3f7ffff0 | 0.99999905 | 0.99999905 | \x3f7ffff0 | t \x3f7ffff1 | 0.9999991 | 0.9999991 | \x3f7ffff1 | t \x3f7ffff2 | 0.99999917 | 0.99999917 | \x3f7ffff2 | t \x3f7ffff3 | 0.9999992 | 0.9999992 | \x3f7ffff3 | t \x3f7ffff4 | 0.9999993 | 0.9999993 | \x3f7ffff4 | t \x3f7ffff5 | 0.99999934 | 0.99999934 | \x3f7ffff5 | t \x3f7ffff6 | 0.9999994 | 0.9999994 | \x3f7ffff6 | t \x3f7ffff7 | 0.99999946 | 0.99999946 | \x3f7ffff7 | t \x3f7ffff8 | 0.9999995 | 0.9999995 | \x3f7ffff8 | t \x3f7ffff9 | 0.9999996 | 0.9999996 | \x3f7ffff9 | t \x3f7ffffa | 0.99999964 | 0.99999964 | \x3f7ffffa | t \x3f7ffffb | 0.9999997 | 0.9999997 | \x3f7ffffb | t \x3f7ffffc | 0.99999976 | 0.99999976 | \x3f7ffffc | t \x3f7ffffd | 0.9999998 | 0.9999998 | \x3f7ffffd | t \x3f7ffffe | 0.9999999 | 0.9999999 | \x3f7ffffe | t \x3f7fffff | 0.99999994 | 0.99999994 | \x3f7fffff | t \x3f800000 | 1 | 1 | \x3f800000 | t \x3f800001 | 1.0000001 | 1.0000001 | \x3f800001 | t \x3f800002 | 1.0000002 | 1.0000002 | \x3f800002 | t \x3f800003 | 1.0000004 | 1.0000004 | \x3f800003 | t \x3f800004 | 1.0000005 | 1.0000005 | \x3f800004 | t \x3f800005 | 1.0000006 | 1.0000006 | \x3f800005 | t \x3f800006 | 1.0000007 | 1.0000007 | \x3f800006 | t \x3f800007 | 1.0000008 | 1.0000008 | \x3f800007 | t \x3f800008 | 1.000001 | 1.000001 | \x3f800008 | t \x3f800009 | 1.0000011 | 1.0000011 | \x3f800009 | t \x3f80000f | 1.0000018 | 1.0000018 | \x3f80000f | t \x3f800010 | 1.0000019 | 1.0000019 | \x3f800010 | t \x3f800011 | 1.000002 | 1.000002 | \x3f800011 | t \x3f800012 | 1.0000021 | 1.0000021 | \x3f800012 | t \x3f800013 | 1.0000023 | 1.0000023 | \x3f800013 | t \x3f800014 | 1.0000024 | 1.0000024 | \x3f800014 | t \x3f800017 | 1.0000027 | 1.0000027 | \x3f800017 | t \x3f800018 | 1.0000029 | 1.0000029 | \x3f800018 | t \x3f800019 | 1.000003 | 1.000003 | \x3f800019 | t \x3f80001a | 1.0000031 | 1.0000031 | \x3f80001a | t \x3f80001b | 1.0000032 | 1.0000032 | \x3f80001b | t \x3f80001c | 1.0000033 | 1.0000033 | \x3f80001c | t \x3f800029 | 1.0000049 | 1.0000049 | \x3f800029 | t \x3f80002a | 1.000005 | 1.000005 | \x3f80002a | t \x3f80002b | 1.0000051 | 1.0000051 | \x3f80002b | t \x3f800053 | 1.0000099 | 1.0000099 | \x3f800053 | t \x3f800054 | 1.00001 | 1.00001 | \x3f800054 | t \x3f800055 | 1.0000101 | 1.0000101 | \x3f800055 | t \x3f800346 | 1.0000999 | 1.0000999 | \x3f800346 | t \x3f800347 | 1.0001 | 1.0001 | \x3f800347 | t \x3f800348 | 1.0001001 | 1.0001001 | \x3f800348 | t \x3f8020c4 | 1.0009999 | 1.0009999 | \x3f8020c4 | t \x3f8020c5 | 1.001 | 1.001 | \x3f8020c5 | t \x3f8020c6 | 1.0010002 | 1.0010002 | \x3f8020c6 | t \x3f8147ad | 1.0099999 | 1.0099999 | \x3f8147ad | t \x3f8147ae | 1.01 | 1.01 | \x3f8147ae | t \x3f8147af | 1.0100001 | 1.0100001 | \x3f8147af | t \x3f8ccccc | 1.0999999 | 1.0999999 | \x3f8ccccc | t \x3f8ccccd | 1.1 | 1.1 | \x3f8ccccd | t \x3f8cccce | 1.1000001 | 1.1000001 | \x3f8cccce | t \x3fc90fdb | 1.5707964 | 1.5707964 | \x3fc90fdb | t \x402df854 | 2.7182817 | 2.7182817 | \x402df854 | t \x40490fdb | 3.1415927 | 3.1415927 | \x40490fdb | t \x409fffff | 4.9999995 | 4.9999995 | \x409fffff | t \x40a00000 | 5 | 5 | \x40a00000 | t \x40a00001 | 5.0000005 | 5.0000005 | \x40a00001 | t \x40afffff | 5.4999995 | 5.4999995 | \x40afffff | t \x40b00000 | 5.5 | 5.5 | \x40b00000 | t \x40b00001 | 5.5000005 | 5.5000005 | \x40b00001 | t \x411fffff | 9.999999 | 9.999999 | \x411fffff | t \x41200000 | 10 | 10 | \x41200000 | t \x41200001 | 10.000001 | 10.000001 | \x41200001 | t \x42c7ffff | 99.99999 | 99.99999 | \x42c7ffff | t \x42c80000 | 100 | 100 | \x42c80000 | t \x42c80001 | 100.00001 | 100.00001 | \x42c80001 | t \x4479ffff | 999.99994 | 999.99994 | \x4479ffff | t \x447a0000 | 1000 | 1000 | \x447a0000 | t \x447a0001 | 1000.00006 | 1000.00006 | \x447a0001 | t \x461c3fff | 9999.999 | 9999.999 | \x461c3fff | t \x461c4000 | 10000 | 10000 | \x461c4000 | t \x461c4001 | 10000.001 | 10000.001 | \x461c4001 | t \x47c34fff | 99999.99 | 99999.99 | \x47c34fff | t \x47c35000 | 100000 | 100000 | \x47c35000 | t \x47c35001 | 100000.01 | 100000.01 | \x47c35001 | t \x497423ff | 999999.94 | 999999.94 | \x497423ff | t \x49742400 | 1e+06 | 1e+06 | \x49742400 | t \x49742401 | 1.00000006e+06 | 1.00000006e+06 | \x49742401 | t \x4b18967f | 9.999999e+06 | 9.999999e+06 | \x4b18967f | t \x4b189680 | 1e+07 | 1e+07 | \x4b189680 | t \x4b189681 | 1.0000001e+07 | 1.0000001e+07 | \x4b189681 | t \x4cbebc1f | 9.999999e+07 | 9.999999e+07 | \x4cbebc1f | t \x4cbebc20 | 1e+08 | 1e+08 | \x4cbebc20 | t \x4cbebc21 | 1.0000001e+08 | 1.0000001e+08 | \x4cbebc21 | t \x4e6e6b27 | 9.9999994e+08 | 9.9999994e+08 | \x4e6e6b27 | t \x4e6e6b28 | 1e+09 | 1e+09 | \x4e6e6b28 | t \x4e6e6b29 | 1.00000006e+09 | 1.00000006e+09 | \x4e6e6b29 | t \x501502f8 | 9.999999e+09 | 9.999999e+09 | \x501502f8 | t \x501502f9 | 1e+10 | 1e+10 | \x501502f9 | t \x501502fa | 1.0000001e+10 | 1.0000001e+10 | \x501502fa | t \x51ba43b6 | 9.999999e+10 | 9.999999e+10 | \x51ba43b6 | t \x51ba43b7 | 1e+11 | 1e+11 | \x51ba43b7 | t \x51ba43b8 | 1.0000001e+11 | 1.0000001e+11 | \x51ba43b8 | t \x1f6c1e4a | 5e-20 | 5e-20 | \x1f6c1e4a | t \x59be6cea | 6.7e+15 | 6.7e+15 | \x59be6cea | t \x5d5ab6c4 | 9.85e+17 | 9.85e+17 | \x5d5ab6c4 | t \x2cc4a9bd | 5.5895e-12 | 5.5895e-12 | \x2cc4a9bd | t \x15ae43fd | 7.038531e-26 | 7.038531e-26 | \x15ae43fd | t \x2cf757ca | 7.0299088e-12 | 7.0299088e-12 | \x2cf757ca | t \x665ba998 | 2.5933168e+23 | 2.5933168e+23 | \x665ba998 | t \x743c3324 | 5.9642887e+31 | 5.9642887e+31 | \x743c3324 | t \x47f1205a | 123456.7 | 123456.7 | \x47f1205a | t \x4640e6ae | 12345.67 | 12345.67 | \x4640e6ae | t \x449a5225 | 1234.567 | 1234.567 | \x449a5225 | t \x42f6e9d5 | 123.4567 | 123.4567 | \x42f6e9d5 | t \x414587dd | 12.34567 | 12.34567 | \x414587dd | t \x3f9e064b | 1.234567 | 1.234567 | \x3f9e064b | t \x4c000004 | 3.3554448e+07 | 3.3554448e+07 | \x4c000004 | t \x50061c46 | 8.999999e+09 | 8.999999e+09 | \x50061c46 | t \x510006a8 | 3.4366718e+10 | 3.4366718e+10 | \x510006a8 | t \x48951f84 | 305404.12 | 305404.12 | \x48951f84 | t \x45fd1840 | 8099.0312 | 8099.0312 | \x45fd1840 | t \x39800000 | 0.00024414062 | 0.00024414062 | \x39800000 | t \x3b200000 | 0.0024414062 | 0.0024414062 | \x3b200000 | t \x3b900000 | 0.0043945312 | 0.0043945312 | \x3b900000 | t \x3bd00000 | 0.0063476562 | 0.0063476562 | \x3bd00000 | t \x63800000 | 4.7223665e+21 | 4.7223665e+21 | \x63800000 | t \x4b000000 | 8.388608e+06 | 8.388608e+06 | \x4b000000 | t \x4b800000 | 1.6777216e+07 | 1.6777216e+07 | \x4b800000 | t \x4c000001 | 3.3554436e+07 | 3.3554436e+07 | \x4c000001 | t \x4c800b0d | 6.7131496e+07 | 6.7131496e+07 | \x4c800b0d | t \x00d24584 | 1.9310392e-38 | 1.9310392e-38 | \x00d24584 | t \x00d90b88 | 1.993244e-38 | 1.993244e-38 | \x00d90b88 | t \x45803f34 | 4103.9004 | 4103.9004 | \x45803f34 | t \x4f9f24f7 | 5.3399997e+09 | 5.3399997e+09 | \x4f9f24f7 | t \x3a8722c3 | 0.0010310042 | 0.0010310042 | \x3a8722c3 | t \x5c800041 | 2.882326e+17 | 2.882326e+17 | \x5c800041 | t \x15ae43fd | 7.038531e-26 | 7.038531e-26 | \x15ae43fd | t \x5d4cccfb | 9.223404e+17 | 9.223404e+17 | \x5d4cccfb | t \x4c800001 | 6.710887e+07 | 6.710887e+07 | \x4c800001 | t \x57800ed8 | 2.816025e+14 | 2.816025e+14 | \x57800ed8 | t \x5f000000 | 9.223372e+18 | 9.223372e+18 | \x5f000000 | t \x700000f0 | 1.5846086e+29 | 1.5846086e+29 | \x700000f0 | t \x5f23e9ac | 1.1811161e+19 | 1.1811161e+19 | \x5f23e9ac | t \x5e9502f9 | 5.368709e+18 | 5.368709e+18 | \x5e9502f9 | t \x5e8012b1 | 4.6143166e+18 | 4.6143166e+18 | \x5e8012b1 | t \x3c000028 | 0.007812537 | 0.007812537 | \x3c000028 | t \x60cde861 | 1.18697725e+20 | 1.18697725e+20 | \x60cde861 | t \x03aa2a50 | 1.00014165e-36 | 1.00014165e-36 | \x03aa2a50 | t \x43480000 | 200 | 200 | \x43480000 | t \x4c000000 | 3.3554432e+07 | 3.3554432e+07 | \x4c000000 | t \x5d1502f9 | 6.7108864e+17 | 6.7108864e+17 | \x5d1502f9 | t \x5d9502f9 | 1.3421773e+18 | 1.3421773e+18 | \x5d9502f9 | t \x5e1502f9 | 2.6843546e+18 | 2.6843546e+18 | \x5e1502f9 | t \x3f99999a | 1.2 | 1.2 | \x3f99999a | t \x3f9d70a4 | 1.23 | 1.23 | \x3f9d70a4 | t \x3f9df3b6 | 1.234 | 1.234 | \x3f9df3b6 | t \x3f9e0419 | 1.2345 | 1.2345 | \x3f9e0419 | t \x3f9e0610 | 1.23456 | 1.23456 | \x3f9e0610 | t \x3f9e064b | 1.234567 | 1.234567 | \x3f9e064b | t \x3f9e0651 | 1.2345678 | 1.2345678 | \x3f9e0651 | t \x03d20cfe | 1.23456735e-36 | 1.23456735e-36 | \x03d20cfe | t (261 rows) rollback; -- clean up, lest opr_sanity complain --Testcase 182: drop type xfloat4 cascade; NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to function xfloat4in(cstring) drop cascades to function xfloat4out(xfloat4) drop cascades to cast from xfloat4 to real drop cascades to cast from real to xfloat4 drop cascades to cast from xfloat4 to integer drop cascades to cast from integer to xfloat4 -- Clean up DO $d$ declare l_rec record; begin for l_rec in (select foreign_table_schema, foreign_table_name from information_schema.foreign_tables) loop execute format('drop foreign table %I.%I cascade;', l_rec.foreign_table_schema, l_rec.foreign_table_name); end loop; end; $d$; --Testcase 280: CREATE FOREIGN TABLE "type_FLOAT_INF"( "i" int OPTIONS (key 'true'), "f" float8) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF'); --Testcase 281: CREATE FOREIGN TABLE "type_FLOAT_INF+"( "i" int OPTIONS (key 'true'), "f" float8, "t" text, "l" smallint) SERVER sqlite_svr OPTIONS (table 'type_FLOAT_INF+'); --Testcase 282: SELECT * FROM "type_FLOAT_INF+"; i | f | t | l ---+-----------+------+--- 1 | -Infinity | real | 4 2 | Infinity | real | 3 3 | -Infinity | real | 4 4 | Infinity | real | 3 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 (7 rows) --Testcase 283: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (10, 'Infinity'); --Testcase 284: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (11, '+Infinity'); --Testcase 285: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (12, '-Infinity'); --Testcase 286: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (13, 'Inf'); --Testcase 287: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (14, '+Inf'); --Testcase 288: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (15, '-Inf'); --Testcase 289: SQLite ignores NaN --see https://github.com/sqlite/sqlite/blob/6db0b11e078f4b651f0cf00f845f3d77700c1a3a/src/vdbemem.c#L973 INSERT INTO "type_FLOAT_INF" (i, f) VALUES (16, 'NaN'); --Testcase 290: ALTER FOREIGN TABLE "type_FLOAT_INF" ALTER COLUMN "f" TYPE text; --Testcase 291: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (17, 'Infinity'); --Testcase 292: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (18, '+Infinity'); --Testcase 293: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (19, '-Infinity'); --Testcase 294: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (20, 'Inf'); --Testcase 295: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (21, '+Inf'); --Testcase 296: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (22, '-Inf'); --Testcase 297: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (23, 'NaN'); --Testcase 298: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (24, 'Infinity__'); --Testcase 299: INSERT INTO "type_FLOAT_INF" (i, f) VALUES (25, 'Infi'); --Testcase 300: ALTER FOREIGN TABLE "type_FLOAT_INF" ALTER COLUMN "f" TYPE float8; --Testcase 301: error : improper data with text affinity SELECT * FROM "type_FLOAT_INF+"; ERROR: SQLite value is not compatible with PostgreSQL column data type HINT: SQLite value with "text" affinity (10 bytes) : 'Infinity__' CONTEXT: foreign table "type_FLOAT_INF+" foreign column "f" have data type "double precision" (usual affinity "real"), in query there is reference to foreign column --Testcase 302: DELETE FROM "type_FLOAT_INF" WHERE i = 24; --Testcase 303: error : improper data with text affinity SELECT * FROM "type_FLOAT_INF+"; ERROR: SQLite value is not compatible with PostgreSQL column data type HINT: SQLite value with "text" affinity (4 bytes) : 'Infi' CONTEXT: foreign table "type_FLOAT_INF+" foreign column "f" have data type "double precision" (usual affinity "real"), in query there is reference to foreign column --Testcase 304: DELETE FROM "type_FLOAT_INF" WHERE i = 25; --Testcase 305: SELECT * FROM "type_FLOAT_INF"; i | f ----+----------- 1 | -Infinity 2 | Infinity 3 | -Infinity 4 | Infinity 5 | -1e+308 6 | 0 7 | 1e+308 10 | Infinity 11 | Infinity 12 | -Infinity 13 | Infinity 14 | Infinity 15 | -Infinity 16 | 17 | Infinity 18 | Infinity 19 | -Infinity 20 | Infinity 21 | Infinity 22 | -Infinity 23 | NaN (21 rows) --Testcase 306: SELECT * FROM "type_FLOAT_INF+"; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 2 | Infinity | real | 3 3 | -Infinity | real | 4 4 | Infinity | real | 3 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 10 | Infinity | real | 3 11 | Infinity | real | 3 12 | -Infinity | real | 4 13 | Infinity | real | 3 14 | Infinity | real | 3 15 | -Infinity | real | 4 16 | | null | 17 | Infinity | text | 8 18 | Infinity | text | 9 19 | -Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 22 | -Infinity | text | 4 23 | NaN | text | 3 (21 rows) --Testcase 307: SELECT * FROM "type_FLOAT_INF+" ORDER BY f ASC, i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 23 | NaN | text | 3 16 | | null | (21 rows) --Testcase 308: SELECT * FROM "type_FLOAT_INF+" ORDER BY f DESC, i; i | f | t | l ----+-----------+------+--- 16 | | null | 23 | NaN | text | 3 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 7 | 1e+308 | real | 8 6 | 0 | real | 3 5 | -1e+308 | real | 9 1 | -Infinity | real | 4 3 | -Infinity | real | 4 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (21 rows) --Testcase 309: SELECT * FROM "type_FLOAT_INF+" WHERE f > '+Infinity' ORDER BY i; i | f | t | l ----+-----+------+--- 23 | NaN | text | 3 (1 row) --Testcase 310: SELECT * FROM "type_FLOAT_INF+" WHERE f < '+Infinity' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (9 rows) --Testcase 311: SELECT * FROM "type_FLOAT_INF+" WHERE f = '+Infinity' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 (10 rows) --Testcase 312: SELECT * FROM "type_FLOAT_INF+" WHERE f > '+Inf' ORDER BY i; i | f | t | l ----+-----+------+--- 23 | NaN | text | 3 (1 row) --Testcase 313: SELECT * FROM "type_FLOAT_INF+" WHERE f < '+Inf' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (9 rows) --Testcase 314: SELECT * FROM "type_FLOAT_INF+" WHERE f = '+Inf' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 (10 rows) --Testcase 315: SELECT * FROM "type_FLOAT_INF+" WHERE f > '-Infinity' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 23 | NaN | text | 3 (14 rows) --Testcase 316: SELECT * FROM "type_FLOAT_INF+" WHERE f < '-Infinity' ORDER BY i; i | f | t | l ---+---+---+--- (0 rows) --Testcase 317: SELECT * FROM "type_FLOAT_INF+" WHERE f = '-Infinity' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (6 rows) --Testcase 318: SELECT * FROM "type_FLOAT_INF+" WHERE f > '-Inf' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 23 | NaN | text | 3 (14 rows) --Testcase 319: SELECT * FROM "type_FLOAT_INF+" WHERE f < '-Inf' ORDER BY i; i | f | t | l ---+---+---+--- (0 rows) --Testcase 320: SELECT * FROM "type_FLOAT_INF+" WHERE f = '-Inf' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (6 rows) --Testcase 321: SELECT * FROM "type_FLOAT_INF+" WHERE f > 'Infinity' ORDER BY i; i | f | t | l ----+-----+------+--- 23 | NaN | text | 3 (1 row) --Testcase 322: SELECT * FROM "type_FLOAT_INF+" WHERE f < 'Infinity' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (9 rows) --Testcase 323: SELECT * FROM "type_FLOAT_INF+" WHERE f = 'Infinity' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 (10 rows) --Testcase 324: SELECT * FROM "type_FLOAT_INF+" WHERE f > 'Inf' ORDER BY i; i | f | t | l ----+-----+------+--- 23 | NaN | text | 3 (1 row) --Testcase 325: SELECT * FROM "type_FLOAT_INF+" WHERE f < 'Inf' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 3 | -Infinity | real | 4 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 12 | -Infinity | real | 4 15 | -Infinity | real | 4 19 | -Infinity | text | 9 22 | -Infinity | text | 4 (9 rows) --Testcase 326: SELECT * FROM "type_FLOAT_INF+" WHERE f = 'Inf' ORDER BY i; i | f | t | l ----+----------+------+--- 2 | Infinity | real | 3 4 | Infinity | real | 3 10 | Infinity | real | 3 11 | Infinity | real | 3 13 | Infinity | real | 3 14 | Infinity | real | 3 17 | Infinity | text | 8 18 | Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 (10 rows) --Testcase 327: SELECT * FROM "type_FLOAT_INF+" WHERE f > 'NaN' ORDER BY i; i | f | t | l ---+---+---+--- (0 rows) --Testcase 328: SELECT * FROM "type_FLOAT_INF+" WHERE f < 'NaN' ORDER BY i; i | f | t | l ----+-----------+------+--- 1 | -Infinity | real | 4 2 | Infinity | real | 3 3 | -Infinity | real | 4 4 | Infinity | real | 3 5 | -1e+308 | real | 9 6 | 0 | real | 3 7 | 1e+308 | real | 8 10 | Infinity | real | 3 11 | Infinity | real | 3 12 | -Infinity | real | 4 13 | Infinity | real | 3 14 | Infinity | real | 3 15 | -Infinity | real | 4 17 | Infinity | text | 8 18 | Infinity | text | 9 19 | -Infinity | text | 9 20 | Infinity | text | 3 21 | Infinity | text | 4 22 | -Infinity | text | 4 (19 rows) --Testcase 329: SELECT * FROM "type_FLOAT_INF+" WHERE f = 'NaN' ORDER BY i; i | f | t | l ----+-----+------+--- 23 | NaN | text | 3 (1 row) --Testcase 330: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > '+Infinity' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 331: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < '+Infinity' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 332: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = '+Infinity' ORDER BY i; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = 9e999)) (6 rows) --Testcase 333: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > '+Inf' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 334: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < '+Inf' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 335: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = '+Inf' ORDER BY i; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = 9e999)) (6 rows) --Testcase 336: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > '-Infinity' ORDER BY i; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > (-9e999))) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 337: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < '-Infinity' ORDER BY i; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < (-9e999))) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 338: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = '-Infinity' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = (-9e999))) (6 rows) --Testcase 339: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > '-Inf' ORDER BY i; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > (-9e999))) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 340: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < '-Inf' ORDER BY i; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < (-9e999))) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 341: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = '-Inf' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------ Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = (-9e999))) (6 rows) --Testcase 342: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > 'Infinity' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 343: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < 'Infinity' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 344: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = 'Infinity' ORDER BY i; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = 9e999)) (6 rows) --Testcase 345: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > 'Inf' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 346: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < 'Inf' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < 9e999)) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 347: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = 'Inf' ORDER BY i; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = 9e999)) (6 rows) --Testcase 348: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f > 'NaN' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) > 'NaN')) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 349: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f < 'NaN' ORDER BY i; QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) < 'NaN')) ORDER BY `i` ASC NULLS LAST (3 rows) --Testcase 350: EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM "type_FLOAT_INF+" WHERE f = 'NaN' ORDER BY i; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------- Sort Output: i, f, t, l Sort Key: "type_FLOAT_INF+".i -> Foreign Scan on public."type_FLOAT_INF+" Output: i, f, t, l SQLite query: SELECT `i`, sqlite_fdw_float(`f`), `t`, `l` FROM main."type_FLOAT_INF+" WHERE ((sqlite_fdw_float(`f`) = 'NaN')) (6 rows) --Testcase 351: DELETE FROM "type_FLOAT_INF" WHERE i >= 10; --Testcase 352: DROP FOREIGN TABLE "type_FLOAT_INF"; --Testcase 353: DROP FOREIGN TABLE "type_FLOAT_INF+"; --Testcase 270: DROP SERVER sqlite_svr; --Testcase 271: DROP EXTENSION sqlite_fdw CASCADE;