--
-- LIMIT
-- Check the LIMIT/OFFSET feature of SELECT
--
SELECT ''::text AS two, unique1, unique2, stringu1
		FROM onek WHERE unique1 > 50
		ORDER BY unique1 LIMIT 2;
 two | unique1 | unique2 | stringu1 
-----+---------+---------+----------
     |      51 |      76 | ZBAAAA
     |      52 |     985 | ACAAAA
(2 rows)

SELECT ''::text AS five, unique1, unique2, stringu1
		FROM onek WHERE unique1 > 60
		ORDER BY unique1 LIMIT 5;
 five | unique1 | unique2 | stringu1 
------+---------+---------+----------
      |      61 |     560 | JCAAAA
      |      62 |     633 | KCAAAA
      |      63 |     296 | LCAAAA
      |      64 |     479 | MCAAAA
      |      65 |      64 | NCAAAA
(5 rows)

SELECT ''::text AS two, unique1, unique2, stringu1
		FROM onek WHERE unique1 > 60 AND unique1 < 63
		ORDER BY unique1 LIMIT 5;
 two | unique1 | unique2 | stringu1 
-----+---------+---------+----------
     |      61 |     560 | JCAAAA
     |      62 |     633 | KCAAAA
(2 rows)

SELECT ''::text AS three, unique1, unique2, stringu1
		FROM onek WHERE unique1 > 100
		ORDER BY unique1 LIMIT 3 OFFSET 20;
 three | unique1 | unique2 | stringu1 
-------+---------+---------+----------
       |     121 |     700 | REAAAA
       |     122 |     519 | SEAAAA
       |     123 |     777 | TEAAAA
(3 rows)

SELECT ''::text AS zero, unique1, unique2, stringu1
		FROM onek WHERE unique1 < 50
		ORDER BY unique1 DESC LIMIT 8 OFFSET 99;
 zero | unique1 | unique2 | stringu1 
------+---------+---------+----------
(0 rows)

SELECT ''::text AS eleven, unique1, unique2, stringu1
		FROM onek WHERE unique1 < 50
		ORDER BY unique1 DESC LIMIT 20 OFFSET 39;
 eleven | unique1 | unique2 | stringu1 
--------+---------+---------+----------
        |      10 |     520 | KAAAAA
        |       9 |      49 | JAAAAA
        |       8 |     653 | IAAAAA
        |       7 |     647 | HAAAAA
        |       6 |     978 | GAAAAA
        |       5 |     541 | FAAAAA
        |       4 |     833 | EAAAAA
        |       3 |     431 | DAAAAA
        |       2 |     326 | CAAAAA
        |       1 |     214 | BAAAAA
        |       0 |     998 | AAAAAA
(11 rows)

SELECT ''::text AS ten, unique1, unique2, stringu1
		FROM onek
		ORDER BY unique1 OFFSET 990;
 ten | unique1 | unique2 | stringu1 
-----+---------+---------+----------
     |     990 |     369 | CMAAAA
     |     991 |     426 | DMAAAA
     |     992 |     363 | EMAAAA
     |     993 |     661 | FMAAAA
     |     994 |     695 | GMAAAA
     |     995 |     144 | HMAAAA
     |     996 |     258 | IMAAAA
     |     997 |      21 | JMAAAA
     |     998 |     549 | KMAAAA
     |     999 |     152 | LMAAAA
(10 rows)

SELECT ''::text AS five, unique1, unique2, stringu1
		FROM onek
		ORDER BY unique1 OFFSET 990 LIMIT 5;
 five | unique1 | unique2 | stringu1 
------+---------+---------+----------
      |     990 |     369 | CMAAAA
      |     991 |     426 | DMAAAA
      |     992 |     363 | EMAAAA
      |     993 |     661 | FMAAAA
      |     994 |     695 | GMAAAA
(5 rows)

SELECT ''::text AS five, unique1, unique2, stringu1
		FROM onek
		ORDER BY unique1 LIMIT 5 OFFSET 900;
 five | unique1 | unique2 | stringu1 
------+---------+---------+----------
      |     900 |     913 | QIAAAA
      |     901 |     931 | RIAAAA
      |     902 |     702 | SIAAAA
      |     903 |     641 | TIAAAA
      |     904 |     793 | UIAAAA
(5 rows)

-- Test null limit and offset.  The planner would discard a simple null
-- constant, so to ensure executor is exercised, do this:
select * from int8_tbl limit (case when random() < 0.5 then null::bigint end);
        q1        |        q2         
------------------+-------------------
              123 |               456
              123 |  4567890123456789
 4567890123456789 |               123
 4567890123456789 |  4567890123456789
 4567890123456789 | -4567890123456789
(5 rows)

select * from int8_tbl offset (case when random() < 0.5 then null::bigint end);
        q1        |        q2         
------------------+-------------------
              123 |               456
              123 |  4567890123456789
 4567890123456789 |               123
 4567890123456789 |  4567890123456789
 4567890123456789 | -4567890123456789
(5 rows)

-- Test assorted cases involving backwards fetch from a LIMIT plan node
begin;
rollback;
select sum(tenthous) as s1, sum(tenthous) + random()*0 as s2
  from tenk1 group by thousand order by thousand limit 3;
  s1   |  s2   
-------+-------
 45000 | 45000
 45010 | 45010
 45020 | 45020
(3 rows)

SELECT  thousand
		FROM onek WHERE thousand < 5
		ORDER BY thousand FETCH FIRST 2 ROW ONLY;
 thousand 
----------
        0
        0
(2 rows)

-- SKIP LOCKED and WITH TIES are incompatible
SELECT  thousand
		FROM onek WHERE thousand < 5
		ORDER BY thousand FETCH FIRST 1 ROW WITH TIES FOR UPDATE SKIP LOCKED;
ERROR:  SKIP LOCKED and WITH TIES options cannot be used together
-- should fail
SELECT ''::text AS two, unique1, unique2, stringu1
		FROM onek WHERE unique1 > 50
		FETCH FIRST 2 ROW WITH TIES;
ERROR:  WITH TIES cannot be specified without ORDER BY clause
-- leave these views