github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/logictest/testdata/logic_test/order_by (about)

     1  statement ok
     2  CREATE TABLE t (
     3    a INT PRIMARY KEY,
     4    b INT,
     5    c BOOLEAN
     6  )
     7  
     8  statement ok
     9  INSERT INTO t VALUES (1, 9, true), (2, 8, false), (3, 7, NULL)
    10  
    11  query B
    12  SELECT c FROM t ORDER BY c
    13  ----
    14  NULL
    15  false
    16  true
    17  
    18  # The following test ensures that the "rowsort" directive
    19  # in TestLogic does its work properly.
    20  query B rowsort
    21  SELECT c FROM t ORDER BY c
    22  ----
    23  false
    24  NULL
    25  true
    26  
    27  query B
    28  SELECT c FROM t ORDER BY c DESC
    29  ----
    30  true
    31  false
    32  NULL
    33  
    34  query II
    35  SELECT a, b FROM t ORDER BY b
    36  ----
    37  3 7
    38  2 8
    39  1 9
    40  
    41  query II
    42  SELECT a, b FROM t ORDER BY b DESC
    43  ----
    44  1 9
    45  2 8
    46  3 7
    47  
    48  query I
    49  SELECT a FROM t ORDER BY 1 DESC
    50  ----
    51  3
    52  2
    53  1
    54  
    55  query II
    56  SELECT a, b FROM t ORDER BY b DESC LIMIT 2
    57  ----
    58  1 9
    59  2 8
    60  
    61  query BI
    62  SELECT DISTINCT c, b FROM t ORDER BY b DESC LIMIT 2
    63  ----
    64  true   9
    65  false  8
    66  
    67  query II
    68  SELECT a AS foo, b FROM t ORDER BY foo DESC
    69  ----
    70  3 7
    71  2 8
    72  1 9
    73  
    74  # Check that ambiguous references to renders are properly reported.
    75  query error ORDER BY "foo" is ambiguous
    76  SELECT a AS foo, b AS foo FROM t ORDER BY foo
    77  
    78  # Check that no ambiguity is reported if the ORDER BY name refers
    79  # to two or more equivalent renders (special case in SQL92).
    80  query II
    81  SELECT a AS foo, (a) AS foo FROM t ORDER BY foo LIMIT 1
    82  ----
    83  1 1
    84  
    85  query II
    86  SELECT a AS "foo.bar", b FROM t ORDER BY "foo.bar" DESC
    87  ----
    88  3 7
    89  2 8
    90  1 9
    91  
    92  query II
    93  SELECT a AS foo, b FROM t ORDER BY a DESC
    94  ----
    95  3 7
    96  2 8
    97  1 9
    98  
    99  query I
   100  SELECT b FROM t ORDER BY a DESC
   101  ----
   102  7
   103  8
   104  9
   105  
   106  statement ok
   107  INSERT INTO t VALUES (4, 7), (5, 7)
   108  
   109  query II
   110  SELECT a, b FROM t WHERE b = 7 ORDER BY b, a
   111  ----
   112  3 7
   113  4 7
   114  5 7
   115  
   116  query II
   117  SELECT a, b FROM t ORDER BY b, a DESC
   118  ----
   119  5 7
   120  4 7
   121  3 7
   122  2 8
   123  1 9
   124  
   125  query III
   126  SELECT a, b, a+b AS ab FROM t WHERE b = 7 ORDER BY ab DESC, a
   127  ----
   128  5 7 12
   129  4 7 11
   130  3 7 10
   131  
   132  query I
   133  SELECT a FROM t ORDER BY a+b DESC, a
   134  ----
   135  5
   136  4
   137  1
   138  2
   139  3
   140  
   141  query I
   142  SELECT a FROM t ORDER BY (((a)))
   143  ----
   144  1
   145  2
   146  3
   147  4
   148  5
   149  
   150  query I
   151  (((SELECT a FROM t))) ORDER BY a DESC LIMIT 4
   152  ----
   153  5
   154  4
   155  3
   156  2
   157  
   158  query I
   159  (((SELECT a FROM t ORDER BY a DESC LIMIT 4)))
   160  ----
   161  5
   162  4
   163  3
   164  2
   165  
   166  query error pgcode 42601 multiple ORDER BY clauses not allowed
   167  ((SELECT a FROM t ORDER BY a)) ORDER BY a
   168  
   169  query error expected c to be of type int, found type bool
   170  SELECT CASE a WHEN 1 THEN b ELSE c END as val FROM t ORDER BY val
   171  
   172  query error pgcode 42P10 ORDER BY position 0 is not in select list
   173  SELECT * FROM t ORDER BY 0
   174  
   175  query error pgcode 42601 non-integer constant in ORDER BY: true
   176  SELECT * FROM t ORDER BY true
   177  
   178  query error pgcode 42601 non-integer constant in ORDER BY: 'a'
   179  SELECT * FROM t ORDER BY 'a'
   180  
   181  query error pgcode 42601 non-integer constant in ORDER BY: 2\.5
   182  SELECT * FROM t ORDER BY 2.5
   183  
   184  query error column "foo" does not exist
   185  SELECT * FROM t ORDER BY foo
   186  
   187  query error no data source matches prefix: a
   188  SELECT a FROM t ORDER BY a.b
   189  
   190  query IT
   191  SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY 1
   192  ----
   193  1 {1}
   194  
   195  query IT
   196  SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY generate_series
   197  ----
   198  1 {1}
   199  
   200  query IT
   201  SELECT generate_series, ARRAY[generate_series] FROM generate_series(1, 1) ORDER BY -generate_series
   202  ----
   203  1 {1}
   204  
   205  statement ok
   206  CREATE TABLE abc (
   207    a INT,
   208    b INT,
   209    c INT,
   210    d VARCHAR,
   211    PRIMARY KEY (a, b, c),
   212    UNIQUE INDEX bc (b, c),
   213    INDEX ba (b, a),
   214    FAMILY (a, b, c),
   215    FAMILY (d)
   216  )
   217  
   218  statement ok
   219  INSERT INTO abc VALUES (1, 2, 3, 'one'), (4, 5, 6, 'Two')
   220  
   221  query T
   222  SELECT d FROM abc ORDER BY lower(d)
   223  ----
   224  one
   225  Two
   226  
   227  query I
   228  SELECT a FROM abc ORDER BY a DESC
   229  ----
   230  4
   231  1
   232  
   233  query I
   234  SELECT a FROM abc ORDER BY a DESC LIMIT 1
   235  ----
   236  4
   237  
   238  query I
   239  SELECT a FROM abc ORDER BY a DESC OFFSET 1
   240  ----
   241  1
   242  
   243  statement ok
   244  CREATE TABLE bar (id INT PRIMARY KEY, baz STRING, UNIQUE INDEX i_bar (baz))
   245  
   246  statement ok
   247  INSERT INTO bar VALUES (0, NULL), (1, NULL)
   248  
   249  # Here rowsort is needed because the ORDER BY clause does not guarantee any
   250  # relative ordering between rows where baz is NULL. As we see above, because
   251  # this is a unique index, the ordering `+baz,+id` is deemed equivalent to just
   252  # `+baz`.
   253  query IT rowsort
   254  SELECT * FROM bar ORDER BY baz, id
   255  ----
   256  0 NULL
   257  1 NULL
   258  
   259  statement ok
   260  CREATE TABLE abcd (
   261    a INT PRIMARY KEY,
   262    b INT,
   263    c INT,
   264    d INT,
   265    INDEX abc (a, b, c)
   266  )
   267  
   268  statement ok
   269  INSERT INTO abcd VALUES (1, 4, 2, 3), (2, 3, 4, 1), (3, 2, 1, 2), (4, 4, 1, 1)
   270  
   271  # Verify that render expressions after sorts perform correctly. We need the
   272  # rowsort as we're attempting to force a RENDER expression after the first
   273  # ORDER BY, to ensure it renders correctly, but the outer query doesn't
   274  # guarantee that it will preserve the order.
   275  
   276  query I rowsort
   277  SELECT a+b FROM (SELECT * FROM abcd ORDER BY d)
   278  ----
   279  5
   280  5
   281  5
   282  8
   283  
   284  query I rowsort
   285  SELECT b+d FROM (SELECT * FROM abcd ORDER BY a,d)
   286  ----
   287  7
   288  4
   289  4
   290  5
   291  
   292  statement ok
   293  CREATE TABLE nan (id INT PRIMARY KEY, x REAL)
   294  
   295  statement ok
   296  INSERT INTO nan VALUES (1, 'NaN'), (2, -1), (3, 1), (4, 'NaN')
   297  
   298  query R
   299  SELECT x FROM nan ORDER BY x
   300  ----
   301  NaN
   302  NaN
   303  -1
   304  1
   305  
   306  statement ok
   307  CREATE TABLE blocks (
   308    block_id  INT,
   309    writer_id STRING,
   310    block_num INT,
   311    raw_bytes BYTES,
   312    PRIMARY KEY (block_id, writer_id, block_num)
   313  )
   314  
   315  # Test ORDER BY with STORING column.
   316  statement ok
   317  CREATE TABLE store (
   318      id INT PRIMARY KEY,
   319      baz STRING,
   320      extra INT,
   321      UNIQUE INDEX i_store (baz) STORING (extra)
   322  )
   323  
   324  statement ok
   325  INSERT INTO store VALUES (0, NULL, 10), (1, NULL, 5)
   326  
   327  # Here rowsort is needed because a unique index still allows duplicate NULL
   328  # values. It's not correct to sort on baz alone, even though it is "unique".
   329  query ITI
   330  SELECT * FROM store ORDER BY baz, extra
   331  ----
   332  1  NULL  5
   333  0  NULL  10
   334  
   335  # ------------------------------------------------------------------------------
   336  # ORDER BY INDEX test cases.
   337  # ------------------------------------------------------------------------------
   338  subtest order_by_index
   339  
   340  statement ok
   341  CREATE TABLE kv(k INT PRIMARY KEY, v INT); CREATE INDEX foo ON kv(v DESC)
   342  
   343  # Check the extended syntax cannot be used in case of renames.
   344  statement error no data source matches prefix: test.public.kv
   345  SELECT * FROM kv AS a, kv AS b ORDER BY PRIMARY KEY kv
   346  
   347  # The INDEX/PRIMARY syntax can only be used when the data source
   348  # is a real table, not an alias.
   349  #
   350  statement error no data source matches prefix: test.public.kv
   351  SELECT k FROM (SELECT @1, @1 FROM generate_series(1,10)) AS kv(k,v) ORDER BY PRIMARY KEY kv
   352  
   353  statement error no data source matches prefix: test.public.kv
   354  CREATE TABLE unrelated(x INT); SELECT * FROM unrelated ORDER BY PRIMARY KEY kv
   355  
   356  # Check that prepare doesn't crash on ORDER BY PK clauses #17312
   357  statement ok
   358  PREPARE a AS (TABLE kv) ORDER BY PRIMARY KEY kv
   359  
   360  statement error ORDER BY INDEX in window definition is not supported
   361  SELECT avg(k) OVER (ORDER BY PRIMARY KEY kv) FROM kv
   362  
   363  statement ok
   364  INSERT INTO kv VALUES (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)
   365  
   366  query I
   367  SELECT k FROM kv ORDER BY INDEX kv@foo
   368  ----
   369  1
   370  2
   371  3
   372  4
   373  5
   374  
   375  statement ok
   376  CREATE TABLE abc2 (
   377    a INT,
   378    b INT,
   379    c INT,
   380    PRIMARY KEY (a, b),
   381    UNIQUE INDEX bc (b, c),
   382    INDEX ba (b, a)
   383  )
   384  
   385  statement ok
   386  INSERT INTO abc2 VALUES (2, 30, 400), (1, 30, 500), (3, 30, 300)
   387  
   388  query III
   389  SELECT a, b, c FROM abc2 ORDER BY PRIMARY KEY abc2
   390  ----
   391  1  30  500
   392  2  30  400
   393  3  30  300
   394  
   395  query III
   396  SELECT a, b, c FROM abc2 ORDER BY PRIMARY KEY abc2 DESC
   397  ----
   398  3  30  300
   399  2  30  400
   400  1  30  500
   401  
   402  query III
   403  SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@bc
   404  ----
   405  3  30  300
   406  2  30  400
   407  1  30  500
   408  
   409  query III
   410  SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@bc DESC
   411  ----
   412  1  30  500
   413  2  30  400
   414  3  30  300
   415  
   416  query III
   417  SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@ba
   418  ----
   419  1  30  500
   420  2  30  400
   421  3  30  300
   422  
   423  query III
   424  SELECT a, b, c FROM abc2 ORDER BY INDEX abc2@ba DESC
   425  ----
   426  3  30  300
   427  2  30  400
   428  1  30  500
   429  
   430  statement error relation \"x\" does not exist
   431  SELECT a, b, c FROM abc2 AS x ORDER BY INDEX x@bc
   432  
   433  statement error no data source matches prefix: test.public.abc2
   434  SELECT a, b, c FROM abc2 AS x ORDER BY INDEX abc2@bc
   435  
   436  # Check that telemetry is being collected on the usage of ORDER BY.
   437  query B
   438  SELECT usage_count > 0 FROM crdb_internal.feature_usage WHERE feature_name = 'sql.plan.opt.node.sort'
   439  ----
   440  true