|
| 1 | +-- |
| 2 | +-- Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
| 3 | +-- |
| 4 | +-- |
| 5 | +-- INT8 |
| 6 | +-- Test int8 64-bit integers. |
| 7 | +-- https://github.com/postgres/postgres/blob/REL_12_BETA2/src/test/regress/sql/int8.sql |
| 8 | +-- |
| 9 | +CREATE TABLE INT8_TBL(q1 bigint, q2 bigint) USING parquet; |
| 10 | + |
| 11 | +INSERT INTO INT8_TBL VALUES(trim(' 123 '),trim(' 456')); |
| 12 | +INSERT INTO INT8_TBL VALUES(trim('123 '),'4567890123456789'); |
| 13 | +INSERT INTO INT8_TBL VALUES('4567890123456789','123'); |
| 14 | +INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); |
| 15 | +INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); |
| 16 | + |
| 17 | +-- [SPARK-27923] Spark SQL insert there bad inputs to NULL |
| 18 | +-- bad inputs |
| 19 | +-- INSERT INTO INT8_TBL(q1) VALUES (' '); |
| 20 | +-- INSERT INTO INT8_TBL(q1) VALUES ('xxx'); |
| 21 | +-- INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485'); |
| 22 | +-- INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934'); |
| 23 | +-- INSERT INTO INT8_TBL(q1) VALUES ('- 123'); |
| 24 | +-- INSERT INTO INT8_TBL(q1) VALUES (' 345 5'); |
| 25 | +-- INSERT INTO INT8_TBL(q1) VALUES (''); |
| 26 | + |
| 27 | +SELECT * FROM INT8_TBL; |
| 28 | + |
| 29 | +-- int8/int8 cmp |
| 30 | +SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789; |
| 31 | +SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789; |
| 32 | +SELECT * FROM INT8_TBL WHERE q2 < 4567890123456789; |
| 33 | +SELECT * FROM INT8_TBL WHERE q2 > 4567890123456789; |
| 34 | +SELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789; |
| 35 | +SELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789; |
| 36 | + |
| 37 | +-- int8/int4 cmp |
| 38 | +SELECT * FROM INT8_TBL WHERE q2 = 456; |
| 39 | +SELECT * FROM INT8_TBL WHERE q2 <> 456; |
| 40 | +SELECT * FROM INT8_TBL WHERE q2 < 456; |
| 41 | +SELECT * FROM INT8_TBL WHERE q2 > 456; |
| 42 | +SELECT * FROM INT8_TBL WHERE q2 <= 456; |
| 43 | +SELECT * FROM INT8_TBL WHERE q2 >= 456; |
| 44 | + |
| 45 | +-- int4/int8 cmp |
| 46 | +SELECT * FROM INT8_TBL WHERE 123 = q1; |
| 47 | +SELECT * FROM INT8_TBL WHERE 123 <> q1; |
| 48 | +SELECT * FROM INT8_TBL WHERE 123 < q1; |
| 49 | +SELECT * FROM INT8_TBL WHERE 123 > q1; |
| 50 | +SELECT * FROM INT8_TBL WHERE 123 <= q1; |
| 51 | +SELECT * FROM INT8_TBL WHERE 123 >= q1; |
| 52 | + |
| 53 | +-- int8/int2 cmp |
| 54 | +SELECT * FROM INT8_TBL WHERE q2 = smallint('456'); |
| 55 | +SELECT * FROM INT8_TBL WHERE q2 <> smallint('456'); |
| 56 | +SELECT * FROM INT8_TBL WHERE q2 < smallint('456'); |
| 57 | +SELECT * FROM INT8_TBL WHERE q2 > smallint('456'); |
| 58 | +SELECT * FROM INT8_TBL WHERE q2 <= smallint('456'); |
| 59 | +SELECT * FROM INT8_TBL WHERE q2 >= smallint('456'); |
| 60 | + |
| 61 | +-- int2/int8 cmp |
| 62 | +SELECT * FROM INT8_TBL WHERE smallint('123') = q1; |
| 63 | +SELECT * FROM INT8_TBL WHERE smallint('123') <> q1; |
| 64 | +SELECT * FROM INT8_TBL WHERE smallint('123') < q1; |
| 65 | +SELECT * FROM INT8_TBL WHERE smallint('123') > q1; |
| 66 | +SELECT * FROM INT8_TBL WHERE smallint('123') <= q1; |
| 67 | +SELECT * FROM INT8_TBL WHERE smallint('123') >= q1; |
| 68 | + |
| 69 | + |
| 70 | +SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL; |
| 71 | + |
| 72 | +SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL; |
| 73 | +SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL; |
| 74 | +SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL; |
| 75 | +SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL |
| 76 | + WHERE q1 < 1000 or (q2 > 0 and q2 < 1000); |
| 77 | +SELECT '' AS five, q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL; |
| 78 | + |
| 79 | +SELECT '' AS five, q1, double(q1) FROM INT8_TBL; |
| 80 | +SELECT '' AS five, q2, double(q2) FROM INT8_TBL; |
| 81 | + |
| 82 | +SELECT 37 + q1 AS plus4 FROM INT8_TBL; |
| 83 | +SELECT 37 - q1 AS minus4 FROM INT8_TBL; |
| 84 | +SELECT '' AS five, 2 * q1 AS `twice int4` FROM INT8_TBL; |
| 85 | +SELECT '' AS five, q1 * 2 AS `twice int4` FROM INT8_TBL; |
| 86 | + |
| 87 | +-- [SPARK-2659] HiveQL: Division operator should always perform fractional division |
| 88 | +-- int8 op int4 |
| 89 | +SELECT q1 + int(42) AS `8plus4`, q1 - int(42) AS `8minus4`, q1 * int(42) AS `8mul4`, q1 / int(42) AS `8div4` FROM INT8_TBL; |
| 90 | +-- int4 op int8 |
| 91 | +SELECT int(246) + q1 AS `4plus8`, int(246) - q1 AS `4minus8`, int(246) * q1 AS `4mul8`, int(246) / q1 AS `4div8` FROM INT8_TBL; |
| 92 | + |
| 93 | +-- int8 op int2 |
| 94 | +SELECT q1 + smallint(42) AS `8plus2`, q1 - smallint(42) AS `8minus2`, q1 * smallint(42) AS `8mul2`, q1 / smallint(42) AS `8div2` FROM INT8_TBL; |
| 95 | +-- int2 op int8 |
| 96 | +SELECT smallint(246) + q1 AS `2plus8`, smallint(246) - q1 AS `2minus8`, smallint(246) * q1 AS `2mul8`, smallint(246) / q1 AS `2div8` FROM INT8_TBL; |
| 97 | + |
| 98 | +SELECT q2, abs(q2) FROM INT8_TBL; |
| 99 | +SELECT min(q1), min(q2) FROM INT8_TBL; |
| 100 | +SELECT max(q1), max(q2) FROM INT8_TBL; |
| 101 | + |
| 102 | +-- [SPARK-28137] Missing Data Type Formatting Functions |
| 103 | +-- TO_CHAR() |
| 104 | +-- |
| 105 | +-- SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999') |
| 106 | +-- FROM INT8_TBL; |
| 107 | + |
| 108 | +-- SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999') |
| 109 | +-- FROM INT8_TBL; |
| 110 | + |
| 111 | +-- SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR') |
| 112 | +-- FROM INT8_TBL; |
| 113 | + |
| 114 | +-- SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') |
| 115 | +-- FROM INT8_TBL; |
| 116 | + |
| 117 | +-- SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL; |
| 118 | +-- SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL; |
| 119 | +-- SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL; |
| 120 | +-- SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL; |
| 121 | +-- SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL; |
| 122 | +-- SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL; |
| 123 | +-- SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL; |
| 124 | +-- SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL; |
| 125 | +-- SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL; |
| 126 | +-- SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL; |
| 127 | +-- SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL; |
| 128 | +-- SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL; |
| 129 | +-- SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL; |
| 130 | + |
| 131 | +-- [SPARK-26218] Throw exception on overflow for integers |
| 132 | +-- check min/max values and overflow behavior |
| 133 | + |
| 134 | +-- select bigint('-9223372036854775808'); |
| 135 | +-- select bigint('-9223372036854775809'); |
| 136 | +-- select bigint('9223372036854775807'); |
| 137 | +-- select bigint('9223372036854775808'); |
| 138 | + |
| 139 | +-- select bigint('9223372036854775808'); |
| 140 | + |
| 141 | +-- select -(bigint('-9223372036854775807')); |
| 142 | +-- select -(bigint('-9223372036854775808')); |
| 143 | + |
| 144 | +-- select bigint('9223372036854775800') + bigint('9223372036854775800'); |
| 145 | +-- select bigint('-9223372036854775800') + bigint('-9223372036854775800'); |
| 146 | + |
| 147 | +-- select bigint('9223372036854775800') - bigint('-9223372036854775800'); |
| 148 | +-- select bigint('-9223372036854775800') - bigint('9223372036854775800'); |
| 149 | + |
| 150 | +-- select bigint('9223372036854775800') * bigint('9223372036854775800'); |
| 151 | + |
| 152 | +select bigint('9223372036854775800') / bigint('0'); |
| 153 | +-- select bigint('9223372036854775800') % bigint('0'); |
| 154 | + |
| 155 | +-- select abs(bigint('-9223372036854775808')); |
| 156 | + |
| 157 | +-- select bigint('9223372036854775800') + int('100'); |
| 158 | +-- select bigint('-9223372036854775800') - int('100'); |
| 159 | +-- select bigint('9223372036854775800') * int('100'); |
| 160 | + |
| 161 | +-- select int('100') + bigint('9223372036854775800'); |
| 162 | +-- select int('-100') - bigint('9223372036854775800'); |
| 163 | +-- select int('100') * bigint('9223372036854775800'); |
| 164 | + |
| 165 | +-- select bigint('9223372036854775800') + smallint('100'); |
| 166 | +-- select bigint('-9223372036854775800') - smallint('100'); |
| 167 | +-- select bigint('9223372036854775800') * smallint('100'); |
| 168 | +select bigint('-9223372036854775808') / smallint('0'); |
| 169 | + |
| 170 | +-- select smallint('100') + bigint('9223372036854775800'); |
| 171 | +-- select smallint('-100') - bigint('9223372036854775800'); |
| 172 | +-- select smallint('100') * bigint('9223372036854775800'); |
| 173 | +select smallint('100') / bigint('0'); |
| 174 | + |
| 175 | +SELECT CAST(q1 AS int) FROM int8_tbl WHERE q2 = 456; |
| 176 | +SELECT CAST(q1 AS int) FROM int8_tbl WHERE q2 <> 456; |
| 177 | + |
| 178 | +SELECT CAST(q1 AS smallint) FROM int8_tbl WHERE q2 = 456; |
| 179 | +SELECT CAST(q1 AS smallint) FROM int8_tbl WHERE q2 <> 456; |
| 180 | + |
| 181 | +SELECT CAST(smallint('42') AS bigint), CAST(smallint('-37') AS bigint); |
| 182 | + |
| 183 | +SELECT CAST(q1 AS float), CAST(q2 AS double) FROM INT8_TBL; |
| 184 | +SELECT CAST(float('36854775807.0') AS bigint); |
| 185 | +SELECT CAST(double('922337203685477580700.0') AS bigint); |
| 186 | + |
| 187 | + |
| 188 | +-- [SPARK-28027] Missing some mathematical operators |
| 189 | +-- bit operations |
| 190 | + |
| 191 | +-- SELECT q1, q2, q1 & q2 AS `and`, q1 | q2 AS `or`, q1 # q2 AS `xor`, ~q1 AS `not` FROM INT8_TBL; |
| 192 | +SELECT q1, q2, q1 & q2 AS `and`, q1 | q2 AS `or`, ~q1 AS `not` FROM INT8_TBL; |
| 193 | +-- SELECT q1, q1 << 2 AS `shl`, q1 >> 3 AS `shr` FROM INT8_TBL; |
| 194 | + |
| 195 | + |
| 196 | +-- generate_series |
| 197 | + |
| 198 | +SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799')); |
| 199 | +SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799'), 0); |
| 200 | +SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799'), 2); |
| 201 | + |
| 202 | +-- corner case |
| 203 | +SELECT string(shiftleft(bigint(-1), 63)); |
| 204 | +SELECT string(int(shiftleft(bigint(-1), 63))+1); |
| 205 | + |
| 206 | +-- [SPARK-26218] Throw exception on overflow for integers |
| 207 | +-- check sane handling of INT64_MIN overflow cases |
| 208 | +SELECT bigint((-9223372036854775808)) * bigint((-1)); |
| 209 | +SELECT bigint((-9223372036854775808)) / bigint((-1)); |
| 210 | +SELECT bigint((-9223372036854775808)) % bigint((-1)); |
| 211 | +SELECT bigint((-9223372036854775808)) * int((-1)); |
| 212 | +SELECT bigint((-9223372036854775808)) / int((-1)); |
| 213 | +SELECT bigint((-9223372036854775808)) % int((-1)); |
| 214 | +SELECT bigint((-9223372036854775808)) * smallint((-1)); |
| 215 | +SELECT bigint((-9223372036854775808)) / smallint((-1)); |
| 216 | +SELECT bigint((-9223372036854775808)) % smallint((-1)); |
| 217 | + |
| 218 | +-- [SPARK-28028] Cast numeric to integral type need round |
| 219 | +-- check rounding when casting from float |
| 220 | +SELECT x, bigint(x) AS int8_value |
| 221 | +FROM (VALUES (double(-2.5)), |
| 222 | + (double(-1.5)), |
| 223 | + (double(-0.5)), |
| 224 | + (double(0.0)), |
| 225 | + (double(0.5)), |
| 226 | + (double(1.5)), |
| 227 | + (double(2.5))) t(x); |
| 228 | + |
| 229 | +-- check rounding when casting from numeric |
| 230 | +SELECT x, bigint(x) AS int8_value |
| 231 | +FROM (VALUES cast(-2.5 as decimal(38, 18)), |
| 232 | + cast(-1.5 as decimal(38, 18)), |
| 233 | + cast(-0.5 as decimal(38, 18)), |
| 234 | + cast(-0.0 as decimal(38, 18)), |
| 235 | + cast(0.5 as decimal(38, 18)), |
| 236 | + cast(1.5 as decimal(38, 18)), |
| 237 | + cast(2.5 as decimal(38, 18))) t(x); |
| 238 | + |
| 239 | +DROP TABLE INT8_TBL; |
0 commit comments