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