-
Notifications
You must be signed in to change notification settings - Fork 29k
[SPARK-28136][SQL][TEST] Port int8.sql #24933
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
239 changes: 239 additions & 0 deletions
239
sql/core/src/test/resources/sql-tests/inputs/pgSQL/int8.sql
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,239 @@ | ||
| -- | ||
| -- Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group | ||
| -- | ||
| -- | ||
| -- INT8 | ||
| -- Test int8 64-bit integers. | ||
| -- https://github.com/postgres/postgres/blob/REL_12_BETA2/src/test/regress/sql/int8.sql | ||
| -- | ||
| CREATE TABLE INT8_TBL(q1 bigint, q2 bigint) USING parquet; | ||
|
|
||
| INSERT INTO INT8_TBL VALUES(trim(' 123 '),trim(' 456')); | ||
| INSERT INTO INT8_TBL VALUES(trim('123 '),'4567890123456789'); | ||
| INSERT INTO INT8_TBL VALUES('4567890123456789','123'); | ||
| INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789'); | ||
| INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789'); | ||
|
|
||
| -- [SPARK-27923] Spark SQL insert there bad inputs to NULL | ||
| -- bad inputs | ||
| -- INSERT INTO INT8_TBL(q1) VALUES (' '); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES ('xxx'); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485'); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934'); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES ('- 123'); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES (' 345 5'); | ||
| -- INSERT INTO INT8_TBL(q1) VALUES (''); | ||
|
|
||
| SELECT * FROM INT8_TBL; | ||
|
|
||
| -- int8/int8 cmp | ||
| SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789; | ||
| SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789; | ||
| SELECT * FROM INT8_TBL WHERE q2 < 4567890123456789; | ||
| SELECT * FROM INT8_TBL WHERE q2 > 4567890123456789; | ||
| SELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789; | ||
| SELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789; | ||
|
|
||
| -- int8/int4 cmp | ||
| SELECT * FROM INT8_TBL WHERE q2 = 456; | ||
| SELECT * FROM INT8_TBL WHERE q2 <> 456; | ||
| SELECT * FROM INT8_TBL WHERE q2 < 456; | ||
| SELECT * FROM INT8_TBL WHERE q2 > 456; | ||
| SELECT * FROM INT8_TBL WHERE q2 <= 456; | ||
| SELECT * FROM INT8_TBL WHERE q2 >= 456; | ||
|
|
||
| -- int4/int8 cmp | ||
| SELECT * FROM INT8_TBL WHERE 123 = q1; | ||
| SELECT * FROM INT8_TBL WHERE 123 <> q1; | ||
| SELECT * FROM INT8_TBL WHERE 123 < q1; | ||
| SELECT * FROM INT8_TBL WHERE 123 > q1; | ||
| SELECT * FROM INT8_TBL WHERE 123 <= q1; | ||
| SELECT * FROM INT8_TBL WHERE 123 >= q1; | ||
|
|
||
| -- int8/int2 cmp | ||
| SELECT * FROM INT8_TBL WHERE q2 = smallint('456'); | ||
| SELECT * FROM INT8_TBL WHERE q2 <> smallint('456'); | ||
| SELECT * FROM INT8_TBL WHERE q2 < smallint('456'); | ||
| SELECT * FROM INT8_TBL WHERE q2 > smallint('456'); | ||
| SELECT * FROM INT8_TBL WHERE q2 <= smallint('456'); | ||
| SELECT * FROM INT8_TBL WHERE q2 >= smallint('456'); | ||
|
|
||
| -- int2/int8 cmp | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') = q1; | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') <> q1; | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') < q1; | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') > q1; | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') <= q1; | ||
| SELECT * FROM INT8_TBL WHERE smallint('123') >= q1; | ||
|
|
||
|
|
||
| SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL; | ||
|
|
||
| SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL; | ||
| SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL; | ||
| SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL; | ||
| SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL | ||
| WHERE q1 < 1000 or (q2 > 0 and q2 < 1000); | ||
| SELECT '' AS five, q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL; | ||
|
|
||
| SELECT '' AS five, q1, double(q1) FROM INT8_TBL; | ||
| SELECT '' AS five, q2, double(q2) FROM INT8_TBL; | ||
|
|
||
| SELECT 37 + q1 AS plus4 FROM INT8_TBL; | ||
| SELECT 37 - q1 AS minus4 FROM INT8_TBL; | ||
| SELECT '' AS five, 2 * q1 AS `twice int4` FROM INT8_TBL; | ||
| SELECT '' AS five, q1 * 2 AS `twice int4` FROM INT8_TBL; | ||
|
|
||
| -- [SPARK-2659] HiveQL: Division operator should always perform fractional division | ||
| -- int8 op int4 | ||
| SELECT q1 + int(42) AS `8plus4`, q1 - int(42) AS `8minus4`, q1 * int(42) AS `8mul4`, q1 / int(42) AS `8div4` FROM INT8_TBL; | ||
| -- int4 op int8 | ||
| SELECT int(246) + q1 AS `4plus8`, int(246) - q1 AS `4minus8`, int(246) * q1 AS `4mul8`, int(246) / q1 AS `4div8` FROM INT8_TBL; | ||
|
|
||
| -- int8 op int2 | ||
| SELECT q1 + smallint(42) AS `8plus2`, q1 - smallint(42) AS `8minus2`, q1 * smallint(42) AS `8mul2`, q1 / smallint(42) AS `8div2` FROM INT8_TBL; | ||
| -- int2 op int8 | ||
| SELECT smallint(246) + q1 AS `2plus8`, smallint(246) - q1 AS `2minus8`, smallint(246) * q1 AS `2mul8`, smallint(246) / q1 AS `2div8` FROM INT8_TBL; | ||
|
|
||
| SELECT q2, abs(q2) FROM INT8_TBL; | ||
| SELECT min(q1), min(q2) FROM INT8_TBL; | ||
| SELECT max(q1), max(q2) FROM INT8_TBL; | ||
|
|
||
| -- [SPARK-28137] Missing Data Type Formatting Functions | ||
| -- TO_CHAR() | ||
| -- | ||
| -- SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999') | ||
| -- FROM INT8_TBL; | ||
|
|
||
| -- SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999') | ||
| -- FROM INT8_TBL; | ||
|
|
||
| -- SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR') | ||
| -- FROM INT8_TBL; | ||
|
|
||
| -- SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') | ||
| -- FROM INT8_TBL; | ||
|
|
||
| -- SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL; | ||
| -- 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; | ||
| -- SELECT '' AS to_char_16, to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL; | ||
| -- SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL; | ||
|
|
||
| -- [SPARK-26218] Throw exception on overflow for integers | ||
| -- check min/max values and overflow behavior | ||
|
|
||
| -- select bigint('-9223372036854775808'); | ||
| -- select bigint('-9223372036854775809'); | ||
| -- select bigint('9223372036854775807'); | ||
| -- select bigint('9223372036854775808'); | ||
|
|
||
| -- select bigint('9223372036854775808'); | ||
|
|
||
| -- select -(bigint('-9223372036854775807')); | ||
| -- select -(bigint('-9223372036854775808')); | ||
|
|
||
| -- select bigint('9223372036854775800') + bigint('9223372036854775800'); | ||
| -- select bigint('-9223372036854775800') + bigint('-9223372036854775800'); | ||
|
|
||
| -- select bigint('9223372036854775800') - bigint('-9223372036854775800'); | ||
| -- select bigint('-9223372036854775800') - bigint('9223372036854775800'); | ||
|
|
||
| -- select bigint('9223372036854775800') * bigint('9223372036854775800'); | ||
|
|
||
| select bigint('9223372036854775800') / bigint('0'); | ||
| -- select bigint('9223372036854775800') % bigint('0'); | ||
|
|
||
| -- select abs(bigint('-9223372036854775808')); | ||
|
|
||
| -- select bigint('9223372036854775800') + int('100'); | ||
| -- select bigint('-9223372036854775800') - int('100'); | ||
| -- select bigint('9223372036854775800') * int('100'); | ||
|
|
||
| -- select int('100') + bigint('9223372036854775800'); | ||
| -- select int('-100') - bigint('9223372036854775800'); | ||
| -- select int('100') * bigint('9223372036854775800'); | ||
|
|
||
| -- select bigint('9223372036854775800') + smallint('100'); | ||
| -- select bigint('-9223372036854775800') - smallint('100'); | ||
| -- select bigint('9223372036854775800') * smallint('100'); | ||
| select bigint('-9223372036854775808') / smallint('0'); | ||
|
|
||
| -- select smallint('100') + bigint('9223372036854775800'); | ||
| -- select smallint('-100') - bigint('9223372036854775800'); | ||
| -- select smallint('100') * bigint('9223372036854775800'); | ||
| select smallint('100') / bigint('0'); | ||
|
|
||
| SELECT CAST(q1 AS int) FROM int8_tbl WHERE q2 = 456; | ||
| SELECT CAST(q1 AS int) FROM int8_tbl WHERE q2 <> 456; | ||
|
|
||
| SELECT CAST(q1 AS smallint) FROM int8_tbl WHERE q2 = 456; | ||
| SELECT CAST(q1 AS smallint) FROM int8_tbl WHERE q2 <> 456; | ||
|
|
||
| SELECT CAST(smallint('42') AS bigint), CAST(smallint('-37') AS bigint); | ||
|
|
||
| SELECT CAST(q1 AS float), CAST(q2 AS double) FROM INT8_TBL; | ||
| SELECT CAST(float('36854775807.0') AS bigint); | ||
| SELECT CAST(double('922337203685477580700.0') AS bigint); | ||
|
|
||
|
|
||
| -- [SPARK-28027] Missing some mathematical operators | ||
| -- bit operations | ||
|
|
||
| -- SELECT q1, q2, q1 & q2 AS `and`, q1 | q2 AS `or`, q1 # q2 AS `xor`, ~q1 AS `not` FROM INT8_TBL; | ||
| SELECT q1, q2, q1 & q2 AS `and`, q1 | q2 AS `or`, ~q1 AS `not` FROM INT8_TBL; | ||
| -- SELECT q1, q1 << 2 AS `shl`, q1 >> 3 AS `shr` FROM INT8_TBL; | ||
|
|
||
|
|
||
| -- generate_series | ||
|
|
||
| SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799')); | ||
| SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799'), 0); | ||
| SELECT * FROM range(bigint('+4567890123456789'), bigint('+4567890123456799'), 2); | ||
|
|
||
| -- corner case | ||
| SELECT string(shiftleft(bigint(-1), 63)); | ||
| SELECT string(int(shiftleft(bigint(-1), 63))+1); | ||
|
|
||
| -- [SPARK-26218] Throw exception on overflow for integers | ||
| -- check sane handling of INT64_MIN overflow cases | ||
| SELECT bigint((-9223372036854775808)) * bigint((-1)); | ||
| SELECT bigint((-9223372036854775808)) / bigint((-1)); | ||
| SELECT bigint((-9223372036854775808)) % bigint((-1)); | ||
| SELECT bigint((-9223372036854775808)) * int((-1)); | ||
| SELECT bigint((-9223372036854775808)) / int((-1)); | ||
| SELECT bigint((-9223372036854775808)) % int((-1)); | ||
| SELECT bigint((-9223372036854775808)) * smallint((-1)); | ||
| SELECT bigint((-9223372036854775808)) / smallint((-1)); | ||
| SELECT bigint((-9223372036854775808)) % smallint((-1)); | ||
|
|
||
| -- [SPARK-28028] Cast numeric to integral type need round | ||
| -- check rounding when casting from float | ||
| SELECT x, bigint(x) AS int8_value | ||
| FROM (VALUES (double(-2.5)), | ||
| (double(-1.5)), | ||
| (double(-0.5)), | ||
| (double(0.0)), | ||
| (double(0.5)), | ||
| (double(1.5)), | ||
| (double(2.5))) t(x); | ||
|
|
||
| -- check rounding when casting from numeric | ||
| SELECT x, bigint(x) AS int8_value | ||
| FROM (VALUES cast(-2.5 as decimal(38, 18)), | ||
| cast(-1.5 as decimal(38, 18)), | ||
| cast(-0.5 as decimal(38, 18)), | ||
| cast(-0.0 as decimal(38, 18)), | ||
| cast(0.5 as decimal(38, 18)), | ||
| cast(1.5 as decimal(38, 18)), | ||
| cast(2.5 as decimal(38, 18))) t(x); | ||
|
|
||
| DROP TABLE INT8_TBL; | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.