123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # This file is derived from the logic test suite in CockroachDB. The
- # original file was retrieved on June 10, 2019 from:
- #
- # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/order_by
- #
- # The original source code is subject to the terms of the Apache
- # 2.0 license, a copy of which can be found in the LICENSE file at the
- # root of this repository.
- mode cockroach
- simple conn=mz_system,user=mz_system
- ALTER SYSTEM SET unsafe_enable_table_keys = true
- ----
- COMPLETE 0
- statement ok
- CREATE TABLE t (
- a INT PRIMARY KEY,
- b INT,
- c BOOLEAN
- )
- statement ok
- INSERT INTO t VALUES (1, 9, true), (2, 8, false), (3, 7, NULL)
- # Note: Result differs from Cockroach but matches Postgres.
- query B
- SELECT c FROM t ORDER BY c
- ----
- false
- true
- NULL
- # The following test ensures that the "rowsort" directive
- # in TestLogic does its work properly.
- query B rowsort
- SELECT c FROM t ORDER BY c
- ----
- false
- NULL
- true
- # Note: Result differs from Cockroach but matches Postgres.
- query B
- SELECT c FROM t ORDER BY c DESC
- ----
- NULL
- true
- false
- query II
- SELECT a, b FROM t ORDER BY b
- ----
- 3 7
- 2 8
- 1 9
- query II
- SELECT a, b FROM t ORDER BY b DESC
- ----
- 1 9
- 2 8
- 3 7
- query I
- SELECT a FROM t ORDER BY 1 DESC
- ----
- 3
- 2
- 1
- query II
- SELECT a, b FROM t ORDER BY b DESC LIMIT 2
- ----
- 1 9
- 2 8
- query BI
- SELECT DISTINCT c, b FROM t ORDER BY b DESC LIMIT 2
- ----
- true 9
- false 8
- query II
- SELECT a AS foo, b FROM t ORDER BY foo DESC
- ----
- 3 7
- 2 8
- 1 9
- # Check that ambiguous references to renders are properly reported.
- query error column reference "foo" is ambiguous
- SELECT a AS foo, b AS foo FROM t ORDER BY foo
- # Check that no ambiguity is reported if the ORDER BY name refers
- # to two or more equivalent renders (special case in SQL92).
- query II
- SELECT a AS foo, (a) AS foo FROM t ORDER BY foo LIMIT 1
- ----
- 1 1
- query II
- SELECT a AS "foo.bar", b FROM t ORDER BY "foo.bar" DESC
- ----
- 3 7
- 2 8
- 1 9
- query II
- SELECT a AS foo, b FROM t ORDER BY a DESC
- ----
- 3 7
- 2 8
- 1 9
- query I
- SELECT b FROM t ORDER BY a DESC
- ----
- 7
- 8
- 9
- statement ok
- INSERT INTO t VALUES (4, 7), (5, 7)
- query II
- SELECT a, b FROM t WHERE b = 7 ORDER BY b, a
- ----
- 3 7
- 4 7
- 5 7
- query II
- SELECT a, b FROM t ORDER BY b, a DESC
- ----
- 5 7
- 4 7
- 3 7
- 2 8
- 1 9
- query III
- SELECT a, b, a+b AS ab FROM t WHERE b = 7 ORDER BY ab DESC, a
- ----
- 5 7 12
- 4 7 11
- 3 7 10
- query I
- SELECT a FROM t ORDER BY a+b DESC, a
- ----
- 5
- 4
- 1
- 2
- 3
- query I
- SELECT a FROM t ORDER BY (((a)))
- ----
- 1
- 2
- 3
- 4
- 5
- query I
- (((SELECT a FROM t))) ORDER BY a DESC LIMIT 4
- ----
- 5
- 4
- 3
- 2
- query I
- (((SELECT a FROM t ORDER BY a DESC LIMIT 4)))
- ----
- 5
- 4
- 3
- 2
- query error pgcode 42601 multiple ORDER BY clauses not allowed
- ((SELECT a FROM t ORDER BY a)) ORDER BY a
- query error CASE types integer and boolean cannot be matched
- SELECT CASE a WHEN 1 THEN b ELSE c END as val FROM t ORDER BY val
- query error pgcode 42P10 column reference 0 in ORDER BY clause is out of range \(1 - 3\)
- SELECT * FROM t ORDER BY 0
- query error column "foo" does not exist
- SELECT * FROM t ORDER BY foo
- query error column "a.b" does not exist
- SELECT a FROM t ORDER BY a.b
- query IT
- SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY 1
- ----
- 1 {1}
- query IT
- SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY generate_series
- ----
- 1 {1}
- query IT
- SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY -generate_series
- ----
- 1 {1}
- statement ok
- CREATE TABLE abc (
- a INT,
- b INT,
- c INT,
- d VARCHAR,
- PRIMARY KEY (a, b, c)
- )
- statement ok
- INSERT INTO abc VALUES (1, 2, 3, 'one'), (4, 5, 6, 'Two')
- query T
- SELECT d FROM abc ORDER BY lower(d)
- ----
- one
- Two
- query I
- SELECT a FROM abc ORDER BY a DESC
- ----
- 4
- 1
- query I
- SELECT a FROM abc ORDER BY a DESC LIMIT 1
- ----
- 4
- query I
- SELECT a FROM abc ORDER BY a DESC OFFSET 1
- ----
- 1
- statement ok
- CREATE TABLE bar (id INT PRIMARY KEY, baz STRING)
- statement ok
- INSERT INTO bar VALUES (0, NULL), (1, NULL)
- # Here rowsort is needed because the ORDER BY clause does not guarantee any
- # relative ordering between rows where baz is NULL. As we see above, because
- # this is a unique index, the ordering `+baz,+id` is deemed equivalent to just
- # `+baz`.
- query IT rowsort
- SELECT * FROM bar ORDER BY baz, id
- ----
- 0 NULL
- 1 NULL
- statement ok
- CREATE TABLE abcd (
- a INT PRIMARY KEY,
- b INT,
- c INT,
- d INT
- )
- statement ok
- INSERT INTO abcd VALUES (1, 4, 2, 3), (2, 3, 4, 1), (3, 2, 1, 2), (4, 4, 1, 1)
- # Verify that render expressions after sorts perform correctly. We need the
- # rowsort as we're attempting to force a RENDER expression after the first
- # ORDER BY, to ensure it renders correctly, but the outer query doesn't
- # guarantee that it will preserve the order.
- query I rowsort
- SELECT a+b FROM (SELECT * FROM abcd ORDER BY d)
- ----
- 5
- 5
- 5
- 8
- query I rowsort
- SELECT b+d FROM (SELECT * FROM abcd ORDER BY a,d)
- ----
- 7
- 4
- 4
- 5
- statement ok
- CREATE TABLE nan (id INT PRIMARY KEY, x REAL)
- statement ok
- INSERT INTO nan VALUES (1, 'NaN'), (2, -1), (3, 1), (4, 'NaN')
- # TODO(benesch): NaN sorts backwards in Materialize, it seems.
- skipif postgresql
- query R
- SELECT x FROM nan ORDER BY x
- ----
- NaN
- NaN
- -1
- 1
- statement ok
- CREATE TABLE blocks (
- block_id INT,
- writer_id STRING,
- block_num INT,
- raw_bytes BYTES,
- PRIMARY KEY (block_id, writer_id, block_num)
- )
- # Test ORDER BY with STORING column.
- statement ok
- CREATE TABLE store (
- id INT PRIMARY KEY,
- baz STRING,
- extra INT
- )
- statement ok
- INSERT INTO store VALUES (0, NULL, 10), (1, NULL, 5)
- # Here rowsort is needed because a unique index still allows duplicate NULL
- # values. It's not correct to sort on baz alone, even though it is "unique".
- query ITI
- SELECT * FROM store ORDER BY baz, extra
- ----
- 1 NULL 5
- 0 NULL 10
- # ------------------------------------------------------------------------------
- # ORDER BY INDEX test cases.
- # ------------------------------------------------------------------------------
- subtest order_by_index
- # NOTE(benesch): this is Cockroach-specific syntax we're unlikely to support.
- halt
- statement ok
- CREATE TABLE kv(k INT PRIMARY KEY, v INT)
- statement ok
- CREATE INDEX foo ON kv(v DESC)
- # Check the extended syntax cannot be used in case of renames.
- statement error no data source matches prefix: test.public.kv
- SELECT * FROM kv AS a, kv AS b ORDER BY PRIMARY KEY kv
- # The INDEX/PRIMARY syntax can only be used when the data source
- # is a real table, not an alias.
- #
- statement error no data source matches prefix: test.public.kv
- SELECT k FROM (SELECT @1, @1 FROM generate_series(1,10)) AS kv(k,v) ORDER BY PRIMARY KEY kv
- statement error no data source matches prefix: test.public.kv
- CREATE TABLE unrelated(x INT); SELECT * FROM unrelated ORDER BY PRIMARY KEY kv
- # Check that prepare doesn't crash on ORDER BY PK clauses materialize#17312
- statement ok
- PREPARE a AS (TABLE kv) ORDER BY PRIMARY KEY kv
- statement error ORDER BY INDEX in window definition is not supported
- SELECT avg(k) OVER (ORDER BY PRIMARY KEY kv) FROM kv
- statement ok
- INSERT INTO kv VALUES (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)
- query I
- SELECT k FROM kv ORDER BY INDEX kv@foo
- ----
- 1
- 2
- 3
- 4
- 5
- statement ok
- CREATE TABLE abc2 (
- a INT,
- b INT,
- c INT,
- PRIMARY KEY (a, b),
- UNIQUE INDEX bc (b, c),
- INDEX ba (b, a)
- )
- statement ok
- INSERT INTO abc2 VALUES (2, 30, 400), (1, 30, 500), (3, 30, 300)
- query III
- SELECT a, b, c FROM abc2 ORDER BY PRIMARY KEY abc2
- ----
- 1 30 500
- 2 30 400
- 3 30 300
- query III
- SELECT a, b, c FROM abc2 ORDER BY PRIMARY KEY abc2 DESC
- ----
- 3 30 300
- 2 30 400
- 1 30 500
- query III
- SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@bc
- ----
- 3 30 300
- 2 30 400
- 1 30 500
- query III
- SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@bc DESC
- ----
- 1 30 500
- 2 30 400
- 3 30 300
- query III
- SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@ba
- ----
- 1 30 500
- 2 30 400
- 3 30 300
- query III
- SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@ba DESC
- ----
- 3 30 300
- 2 30 400
- 1 30 500
- statement error relation \"x\" does not exist
- SELECT a, b, c FROM abc2 AS x ORDER BY INDEX x@bc
- statement error no data source matches prefix: test.public.abc2
- SELECT a, b, c FROM abc2 AS x ORDER BY INDEX abc2@bc
|