--
-- INT8
-- Test int8 64-bit integers.
--
CREATE TABLE INT8_TBL(q1 int8, q2 int8);
INSERT INTO INT8_TBL VALUES('123','456');
INSERT INTO INT8_TBL VALUES('123','4567890123456789');
INSERT INTO INT8_TBL VALUES('4567890123456789','123');
INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
SELECT * FROM INT8_TBL;
        q1        |        q2         
------------------+-------------------
              123 |               456
              123 |  4567890123456789
 4567890123456789 |               123
 4567890123456789 |  4567890123456789
 4567890123456789 | -4567890123456789
(5 rows)

SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL;
 five |       plus       |       minus       
------+------------------+-------------------
      |              123 |              -123
      |              123 |              -123
      | 4567890123456789 | -4567890123456789
      | 4567890123456789 | -4567890123456789
      | 4567890123456789 | -4567890123456789
(5 rows)

SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL;
 five |        q1        |        q2         |       plus       
------+------------------+-------------------+------------------
      |              123 |               456 |              579
      |              123 |  4567890123456789 | 4567890123456912
      | 4567890123456789 |               123 | 4567890123456912
      | 4567890123456789 |  4567890123456789 | 9135780246913578
      | 4567890123456789 | -4567890123456789 |                0
(5 rows)

SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;
 five |        q1        |        q2         |       minus       
------+------------------+-------------------+-------------------
      |              123 |               456 |              -333
      |              123 |  4567890123456789 | -4567890123456666
      | 4567890123456789 |               123 |  4567890123456666
      | 4567890123456789 |  4567890123456789 |                 0
      | 4567890123456789 | -4567890123456789 |  9135780246913578
(5 rows)

SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
 WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
 three |        q1        |        q2        |      multiply      
-------+------------------+------------------+--------------------
       |              123 |              456 |              56088
       |              123 | 4567890123456789 | 561850485185185047
       | 4567890123456789 |              123 | 561850485185185047
(3 rows)

SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL;
 five |        q1        |        q2         |     divide     
------+------------------+-------------------+----------------
      |              123 |               456 |              0
      |              123 |  4567890123456789 |              0
      | 4567890123456789 |               123 | 37137318076884
      | 4567890123456789 |  4567890123456789 |              1
      | 4567890123456789 | -4567890123456789 |             -1
(5 rows)

SELECT '' AS five, q1, float8(q1) FROM INT8_TBL;
 five |        q1        |        float8         
------+------------------+-----------------------
      |              123 |                   123
      |              123 |                   123
      | 4567890123456789 | 4.56789012345679e+015
      | 4567890123456789 | 4.56789012345679e+015
      | 4567890123456789 | 4.56789012345679e+015
(5 rows)

SELECT '' AS five, q2, float8(q2) FROM INT8_TBL;
 five |        q2         |         float8         
------+-------------------+------------------------
      |               456 |                    456
      |  4567890123456789 |  4.56789012345679e+015
      |               123 |                    123
      |  4567890123456789 |  4.56789012345679e+015
      | -4567890123456789 | -4.56789012345679e+015
(5 rows)

SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL;
 five |    twice int4    
------+------------------
      |              246
      |              246
      | 9135780246913578
      | 9135780246913578
      | 9135780246913578
(5 rows)

SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL;
 five |    twice int4    
------+------------------
      |              246
      |              246
      | 9135780246913578
      | 9135780246913578
      | 9135780246913578
(5 rows)

-- TO_CHAR()
--
SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999') 
	FROM INT8_TBL;
 to_char_1 |        to_char         |        to_char         
-----------+------------------------+------------------------
           |                    123 |                    456
           |                    123 |  4,567,890,123,456,789
           |  4,567,890,123,456,789 |                    123
           |  4,567,890,123,456,789 |  4,567,890,123,456,789
           |  4,567,890,123,456,789 | -4,567,890,123,456,789
(5 rows)

SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999') 
	FROM INT8_TBL;	
 to_char_2 |            to_char             |            to_char             
-----------+--------------------------------+--------------------------------
           |                    123.000,000 |                    456.000,000
           |                    123.000,000 |  4,567,890,123,456,789.000,000
           |  4,567,890,123,456,789.000,000 |                    123.000,000
           |  4,567,890,123,456,789.000,000 |  4,567,890,123,456,789.000,000
           |  4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000
(5 rows)

SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR') 
	FROM INT8_TBL;
 to_char_3 |      to_char       |        to_char         
-----------+--------------------+------------------------
           |              <123> |              <456.000>
           |              <123> | <4567890123456789.000>
           | <4567890123456789> |              <123.000>
           | <4567890123456789> | <4567890123456789.000>
           | <4567890123456789> |  4567890123456789.000
(5 rows)

SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') 
	FROM INT8_TBL;
 to_char_4 |      to_char      |      to_char      
-----------+-------------------+-------------------
           |              123- |              -456
           |              123- | -4567890123456789
           | 4567890123456789- |              -123
           | 4567890123456789- | -4567890123456789
           | 4567890123456789- | +4567890123456789
(5 rows)

SELECT '' AS to_char_5,  to_char(q2, 'MI9999999999999999')     FROM INT8_TBL;	
 to_char_5 |      to_char       
-----------+--------------------
           |                456
           |   4567890123456789
           |                123
           |   4567890123456789
           | -4567890123456789
(5 rows)

SELECT '' AS to_char_6,  to_char(q2, 'FMS9999999999999999')    FROM INT8_TBL;
 to_char_6 |      to_char      
-----------+-------------------
           | +456
           | +4567890123456789
           | +123
           | +4567890123456789
           | -4567890123456789
(5 rows)

SELECT '' AS to_char_7,  to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;
 to_char_7 |      to_char       
-----------+--------------------
           | 456TH
           | 4567890123456789TH
           | 123RD
           | 4567890123456789TH
           | <4567890123456789>
(5 rows)

SELECT '' AS to_char_8,  to_char(q2, 'SG9999999999999999th')   FROM INT8_TBL;	
 to_char_8 |       to_char       
-----------+---------------------
           | +             456th
           | +4567890123456789th
           | +             123rd
           | +4567890123456789th
           | -4567890123456789
(5 rows)

SELECT '' AS to_char_9,  to_char(q2, '0999999999999999')       FROM INT8_TBL;	
 to_char_9 |      to_char      
-----------+-------------------
           |  0000000000000456
           |  4567890123456789
           |  0000000000000123
           |  4567890123456789
           | -4567890123456789
(5 rows)

SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999')      FROM INT8_TBL;	
 to_char_10 |      to_char      
------------+-------------------
            | +0000000000000456
            | +4567890123456789
            | +0000000000000123
            | +4567890123456789
            | -4567890123456789
(5 rows)

SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999')     FROM INT8_TBL;	
 to_char_11 |      to_char      
------------+-------------------
            | 0000000000000456
            | 4567890123456789
            | 0000000000000123
            | 4567890123456789
            | -4567890123456789
(5 rows)

SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;
 to_char_12 |        to_char        
------------+-----------------------
            | 456.000
            | 4567890123456789.000
            | 123.000
            | 4567890123456789.000
            | -4567890123456789.000
(5 rows)

SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000')  FROM INT8_TBL;	
 to_char_13 |        to_char         
------------+------------------------
            |                456.000
            |   4567890123456789.000
            |                123.000
            |   4567890123456789.000
            |  -4567890123456789.000
(5 rows)

SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;
 to_char_14 |      to_char       
------------+--------------------
            | 456.
            | 4567890123456789.
            | 123.
            | 4567890123456789.
            | -4567890123456789.
(5 rows)

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;
 to_char_15 |                  to_char                  
------------+-------------------------------------------
            |                           +4 5 6 . 0 0 0 
            | + 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
            |                           +1 2 3 . 0 0 0 
            | + 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
            | - 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
(5 rows)

SELECT '' AS to_char_16, to_char(q2, '99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL;
 to_char_16 |                          to_char                          
------------+-----------------------------------------------------------
            |       text      9999     "text between quote marks"   456
            |  45678 text 9012 9999 345 "text between quote marks" 6789
            |       text      9999     "text between quote marks"   123
            |  45678 text 9012 9999 345 "text between quote marks" 6789
            | -45678 text 9012 9999 345 "text between quote marks" 6789
(5 rows)

SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999')     FROM INT8_TBL;
 to_char_17 |      to_char      
------------+-------------------
            |       +       456
            | 456789+0123456789
            |       +       123
            | 456789+0123456789
            | 456789-0123456789
(5 rows)