github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/logictest/testdata/logic_test/array (about) 1 # LogicTest: !3node-tenant 2 # pg arrays must preserve control characters when converted to string, 3 # but their direct representation as string does not escape the 4 # control characters. In order for the test file to remain valid 5 # printable UTF-8, we double-escape the representations below. 6 7 statement ok 8 SET bytea_output = escape 9 10 # array construction 11 12 query error cannot determine type of empty array 13 SELECT ARRAY[] 14 15 query T 16 SELECT ARRAY[1, 2, 3] 17 ---- 18 {1,2,3} 19 20 statement ok 21 CREATE TABLE k ( 22 k INT PRIMARY KEY 23 ) 24 25 statement ok 26 INSERT INTO k VALUES (1), (2), (3), (4), (5) 27 28 query T rowsort 29 SELECT ARRAY[k] FROM k 30 ---- 31 {1} 32 {2} 33 {3} 34 {4} 35 {5} 36 37 query error expected 1 to be of type bool, found type int 38 SELECT ARRAY['a', true, 1] 39 40 query T 41 SELECT ARRAY['a,', 'b{', 'c}', 'd', 'e f'] 42 ---- 43 {"a,","b{","c}",d,"e f"} 44 45 query T 46 SELECT ARRAY['1}'::BYTES] 47 ---- 48 {"\\x317d"} 49 50 # TODO(jordan): #16487 51 # query T 52 # SELECT ARRAY[e'g\x10h'] 53 # ---- 54 # {g\x10h} 55 56 query TTTTTTT 57 SELECT '', 'NULL', 'Null', 'null', NULL, '"', e'\'' 58 ---- 59 · NULL Null null NULL " ' 60 61 query T 62 SELECT ARRAY['', 'NULL', 'Null', 'null', NULL, '"', e'\''] 63 ---- 64 {"","NULL","Null","null",NULL,"\"",'} 65 66 query T 67 SELECT NULL::INT[] 68 ---- 69 NULL 70 71 query TTTT 72 SELECT 73 ARRAY[NULL]::STRING[], 74 ARRAY[NULL]::INT[], 75 ARRAY[NULL]::FLOAT[], 76 ARRAY[NULL]::TIMESTAMP[] 77 ---- 78 {NULL} {NULL} {NULL} {NULL} 79 80 query BB 81 SELECT NULL::INT[] IS DISTINCT FROM NULL, ARRAY[1,2,3] IS DISTINCT FROM NULL 82 ---- 83 false true 84 85 # #19821 86 87 query T 88 SELECT ARRAY['one', 'two', 'fünf'] 89 ---- 90 {one,two,fünf} 91 92 query T 93 SELECT ARRAY[e'\n', e'g\x10h']::STRING::BYTES::STRING 94 ---- 95 {"\012",g\020h} 96 97 query T 98 SELECT ARRAY['foo', 'bar'] 99 ---- 100 {foo,bar} 101 102 # array construction from subqueries 103 104 query T 105 SELECT ARRAY(SELECT 3 WHERE false) 106 ---- 107 {} 108 109 statement ok 110 SELECT ARRAY(SELECT 3 WHERE false) FROM k 111 112 query T 113 SELECT ARRAY(SELECT 3) 114 ---- 115 {3} 116 117 query T 118 SELECT ARRAY(VALUES (1),(2),(1)) 119 ---- 120 {1,2,1} 121 122 statement error arrays cannot have arrays as element type 123 SELECT ARRAY(VALUES (ARRAY[1])) 124 125 query T 126 SELECT ARRAY(VALUES ('a'),('b'),('c')) 127 ---- 128 {a,b,c} 129 130 131 # TODO(justin): uncomment when #32715 is fixed. 132 # query T 133 # SELECT ARRAY(SELECT (1,2)) 134 # ---- 135 # {"(1,2)"} 136 137 query error subquery must return only one column, found 2 138 SELECT ARRAY(SELECT 1, 2) 139 140 query T 141 SELECT ARRAY[]:::int[] 142 ---- 143 {} 144 145 # casting strings to arrays 146 147 query T 148 SELECT '{1,2,3}'::INT[] 149 ---- 150 {1,2,3} 151 152 query T 153 SELECT '{hello,"hello"}'::STRING[] 154 ---- 155 {hello,hello} 156 157 query T 158 SELECT e'{he\\\\llo}'::STRING[] 159 ---- 160 {"he\\llo"} 161 162 query T 163 SELECT '{"abc\nxyz"}'::STRING[] 164 ---- 165 {abcnxyz} 166 167 query T 168 SELECT '{hello}'::VARCHAR(2)[] 169 ---- 170 {he} 171 172 # array casting 173 174 query T 175 SELECT ARRAY['foo']::STRING 176 ---- 177 {foo} 178 179 query T 180 SELECT ARRAY[e'foo\nbar']::STRING::BYTES::STRING 181 ---- 182 {"foo\012bar"} 183 184 query TTTTTT 185 SELECT 186 ARRAY[e'foo\000bar']::STRING::BYTES::STRING, 187 ARRAY[e'foo\001bar']::STRING::BYTES::STRING, 188 ARRAY[e'foo\002bar']::STRING::BYTES::STRING, 189 ARRAY[e'foo\030bar']::STRING::BYTES::STRING, 190 ARRAY[e'foo\034bar']::STRING::BYTES::STRING, 191 ARRAY[e'foo\100bar']::STRING::BYTES::STRING 192 ---- 193 {foo\000bar} {foo\001bar} {foo\002bar} {foo\030bar} {foo\034bar} {foo@bar} 194 195 query T 196 SELECT ARRAY[1,2,3]::INT[] 197 ---- 198 {1,2,3} 199 200 query error invalid cast: int[] -> UUID[] 201 SELECT ARRAY[1,2,3]::UUID[] 202 203 query error invalid cast: inet[] -> INT[] 204 SELECT ARRAY['8.8.8.8'::INET, '8.8.4.4'::INET]::INT[] 205 206 query T 207 SELECT ARRAY[1,2,3]::TEXT[] 208 ---- 209 {1,2,3} 210 211 query T 212 SELECT ARRAY[1,2,3]::INT2VECTOR 213 ---- 214 {1,2,3} 215 216 # array subscript access 217 218 query T 219 SELECT ARRAY['a', 'b', 'c'][-1] 220 ---- 221 NULL 222 223 query T 224 SELECT ARRAY['a', 'b', 'c'][0] 225 ---- 226 NULL 227 228 query T 229 SELECT (ARRAY['a', 'b', 'c'])[2] 230 ---- 231 b 232 233 query T 234 SELECT ARRAY['a', 'b', 'c'][2] 235 ---- 236 b 237 238 query T 239 SELECT ARRAY['a', 'b', 'c'][4] 240 ---- 241 NULL 242 243 query T 244 SELECT ARRAY['a', 'b', 'c'][1.5 + 1.5] 245 ---- 246 c 247 248 query I 249 SELECT ARRAY[1, 2, 3][-1] 250 ---- 251 NULL 252 253 query I 254 SELECT ARRAY[1, 2, 3][0] 255 ---- 256 NULL 257 258 query I 259 SELECT ARRAY[1, 2, 3][2] 260 ---- 261 2 262 263 query I 264 SELECT ARRAY[1, 2, 3][4] 265 ---- 266 NULL 267 268 query I 269 SELECT ARRAY[1, 2, 3][1.5 + 1.5] 270 ---- 271 3 272 273 query error unimplemented: multidimensional indexing 274 SELECT ARRAY['a', 'b', 'c'][4][2] 275 276 query error incompatible ARRAY subscript type: decimal 277 SELECT ARRAY['a', 'b', 'c'][3.5] 278 279 query error could not parse "abc" as type int 280 SELECT ARRAY['a', 'b', 'c']['abc'] 281 282 query error cannot subscript type int because it is not an array 283 SELECT (123)[2] 284 285 # array slicing 286 287 query error unimplemented: ARRAY slicing 288 SELECT ARRAY['a', 'b', 'c'][:] 289 290 query error unimplemented: ARRAY slicing 291 SELECT ARRAY['a', 'b', 'c'][1:] 292 293 query error unimplemented: ARRAY slicing 294 SELECT ARRAY['a', 'b', 'c'][1:2] 295 296 query error unimplemented: ARRAY slicing 297 SELECT ARRAY['a', 'b', 'c'][:2] 298 299 query error unimplemented: ARRAY slicing 300 SELECT ARRAY['a', 'b', 'c'][2:1] 301 302 # other forms of indirection 303 304 # From a column name. 305 query T 306 SELECT a[1] FROM (SELECT ARRAY['a','b','c'] AS a) 307 ---- 308 a 309 310 # From a column ordinal. 311 query T 312 SELECT @1[1] FROM (SELECT ARRAY['a','b','c'] AS a) 313 ---- 314 a 315 316 # From a parenthetized expression. 317 query I 318 SELECT (ARRAY(VALUES (1),(2),(1)))[2] 319 ---- 320 2 321 322 # From an ArrayFlatten expression - ARRAY(subquery)[...] 323 query I 324 SELECT ARRAY(VALUES (1),(2),(1))[2] 325 ---- 326 2 327 328 # From a single-column subquery converted to a single datum. 329 query I 330 SELECT ((SELECT ARRAY[1, 2, 3]))[3] 331 ---- 332 3 333 334 # From a subquery. 335 query T 336 SELECT (SELECT ARRAY['a', 'b', 'c'])[3] 337 ---- 338 c 339 340 query T 341 SELECT ARRAY(SELECT generate_series(1,10) ORDER BY 1 DESC) 342 ---- 343 {10,9,8,7,6,5,4,3,2,1} 344 345 statement ok 346 CREATE TABLE z ( 347 x INT PRIMARY KEY, 348 y INT 349 ) 350 351 statement ok 352 INSERT INTO z VALUES (1, 5), (2, 4), (3, 3), (4, 2), (5, 1) 353 354 query T 355 SELECT ARRAY(SELECT x FROM z ORDER BY y) 356 ---- 357 {5,4,3,2,1} 358 359 # From a function call expression. 360 query T 361 SELECT current_schemas(true)[1] 362 ---- 363 pg_catalog 364 365 # From a CASE sub-expression. 366 query I 367 SELECT (CASE 1 = 1 WHEN true THEN ARRAY[1,2] ELSE ARRAY[2,3] END)[1] 368 ---- 369 1 370 371 # From a tuple. 372 query error cannot subscript type tuple{int, int, int} because it is not an array 373 SELECT (1,2,3)[1] 374 375 query error cannot subscript type tuple{int, int, int} because it is not an array 376 SELECT ROW (1,2,3)[1] 377 378 # Ensure grouping by an array column works 379 380 statement ok 381 SELECT conkey FROM pg_catalog.pg_constraint GROUP BY conkey 382 383 statement ok 384 SELECT indkey[0] FROM pg_catalog.pg_index 385 386 # Verify serialization of array in expression (with distsql). 387 statement ok 388 CREATE TABLE t (k INT) 389 390 statement ok 391 INSERT INTO t VALUES (1), (2), (3), (4), (5) 392 393 query I rowsort 394 SELECT k FROM t WHERE k = ANY ARRAY[2,4] 395 ---- 396 2 397 4 398 399 query I rowsort 400 SELECT k FROM t WHERE k > ANY ARRAY[2,4] 401 ---- 402 3 403 4 404 5 405 406 query I 407 SELECT k FROM t WHERE k < ALL ARRAY[2,4] 408 ---- 409 1 410 411 # Undocumented - bounds should be allowed, as in Postgres 412 statement ok 413 CREATE TABLE boundedtable (b INT[10], c INT ARRAY[10]) 414 415 statement ok 416 DROP TABLE boundedtable 417 418 # Creating multidimensional arrays should be disallowed. 419 statement error .*unimplemented.*\nHINT.*\n.*32552 420 CREATE TABLE badtable (b INT[][]) 421 422 # Nested arrays should be disallowed 423 424 query error unimplemented: arrays cannot have arrays as element type.*\nHINT.*\n.*32552 425 SELECT ARRAY[ARRAY[1,2,3]] 426 427 # The postgres-compat aliases should be disallowed. 428 # INT2VECTOR is deprecated in Postgres. 429 430 query error VECTOR column types are unsupported 431 CREATE TABLE badtable (b INT2VECTOR) 432 433 # Regression test for #18745 434 435 statement ok 436 CREATE TABLE ident (x INT) 437 438 query T 439 SELECT ARRAY[ROW()] FROM ident 440 ---- 441 442 statement ok 443 CREATE TABLE a (b INT ARRAY) 444 445 query TT 446 SHOW CREATE TABLE a 447 ---- 448 a CREATE TABLE a ( 449 b INT8[] NULL, 450 FAMILY "primary" (b, rowid) 451 ) 452 453 statement ok 454 DROP TABLE a 455 456 # Int array columns. 457 458 statement ok 459 CREATE TABLE a (b INT[]) 460 461 statement ok 462 INSERT INTO a VALUES (ARRAY[1,2,3]) 463 464 query T 465 SELECT b FROM a 466 ---- 467 {1,2,3} 468 469 statement ok 470 DELETE FROM a 471 472 statement ok 473 INSERT INTO a VALUES (NULL) 474 475 query T 476 SELECT b FROM a 477 ---- 478 NULL 479 480 statement ok 481 DELETE FROM a 482 483 statement ok 484 INSERT INTO a VALUES (ARRAY[]) 485 486 query T 487 SELECT b FROM a 488 ---- 489 {} 490 491 statement ok 492 DELETE FROM a; 493 494 # Make sure arrays originating from ARRAY_AGG work as expected. 495 496 statement ok 497 INSERT INTO a (SELECT array_agg(generate_series) from generate_series(1,3)) 498 499 query T 500 SELECT * FROM a 501 ---- 502 {1,2,3} 503 504 query TT 505 SHOW CREATE TABLE a 506 ---- 507 a CREATE TABLE a ( 508 b INT8[] NULL, 509 FAMILY "primary" (b, rowid) 510 ) 511 512 statement error could not parse "foo" as type int 513 INSERT INTO a VALUES (ARRAY['foo']) 514 515 statement error could not parse "foo" as type int 516 INSERT INTO a VALUES (ARRAY[1, 'foo']) 517 518 statement ok 519 DELETE FROM a 520 521 statement ok 522 INSERT INTO a VALUES (ARRAY[1,2,3]), (ARRAY[4,5]), (ARRAY[6]) 523 524 query I 525 SELECT b[1] FROM a ORDER BY b[1] 526 ---- 527 1 528 4 529 6 530 531 query I 532 SELECT b[2] FROM a ORDER BY b[1] 533 ---- 534 2 535 5 536 NULL 537 538 # NULL values 539 540 statement ok 541 DELETE FROM a 542 543 statement ok 544 INSERT INTO a VALUES (ARRAY[NULL::INT]), (ARRAY[NULL::INT, 1]), (ARRAY[1, NULL::INT]), (ARRAY[NULL::INT, NULL::INT]) 545 546 query T rowsort 547 SELECT * FROM a 548 ---- 549 {NULL} 550 {NULL,1} 551 {1,NULL} 552 {NULL,NULL} 553 554 statement ok 555 DELETE FROM a 556 557 # Test with arrays bigger than 8 elements so the NULL bitmap has to be larger than a byte 558 559 statement ok 560 INSERT INTO a VALUES (ARRAY[1,2,3,4,5,6,7,8,NULL::INT]) 561 562 query T 563 SELECT * FROM a 564 ---- 565 {1,2,3,4,5,6,7,8,NULL} 566 567 statement ok 568 DROP TABLE a 569 570 # Ensure that additional type info stays when used as an array. 571 572 statement ok 573 CREATE TABLE a (b SMALLINT[]) 574 575 query TT 576 SHOW CREATE TABLE a 577 ---- 578 a CREATE TABLE a ( 579 b INT2[] NULL, 580 FAMILY "primary" (b, rowid) 581 ) 582 583 statement error integer out of range for type int2 \(column "b"\) 584 INSERT INTO a VALUES (ARRAY[100000]) 585 586 statement ok 587 DROP TABLE a 588 589 # String array columns. 590 591 statement ok 592 CREATE TABLE a (b STRING[]) 593 594 statement ok 595 INSERT INTO a VALUES (ARRAY['foo', 'bar', 'baz']) 596 597 query T 598 SELECT b FROM a 599 ---- 600 {foo,bar,baz} 601 602 statement ok 603 UPDATE a SET b = ARRAY[] 604 605 query T 606 SELECT b FROM a 607 ---- 608 {} 609 610 # Test NULLs with strings 611 612 statement ok 613 DELETE FROM a 614 615 statement ok 616 INSERT INTO a VALUES (ARRAY[NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, NULL::STRING, 'G']) 617 618 query T 619 SELECT * FROM a 620 ---- 621 {NULL,NULL,NULL,NULL,NULL,NULL,G} 622 623 statement ok 624 DROP TABLE a 625 626 # Bool array columns. 627 628 statement ok 629 CREATE TABLE a (b BOOL[]) 630 631 statement ok 632 INSERT INTO a VALUES (ARRAY[]), (ARRAY[TRUE]), (ARRAY[FALSE]), (ARRAY[TRUE, TRUE]), (ARRAY[FALSE, TRUE]) 633 634 query T rowsort 635 SELECT b FROM a 636 ---- 637 {} 638 {t} 639 {f} 640 {t,t} 641 {f,t} 642 643 statement ok 644 DROP TABLE a 645 646 # Float array columns. 647 648 statement ok 649 CREATE TABLE a (b FLOAT[]) 650 651 statement ok 652 INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3]) 653 654 query T 655 SELECT b FROM a 656 ---- 657 {1.1,2.2,3.3} 658 659 statement ok 660 DROP TABLE a 661 662 # Decimal array columns. 663 664 statement ok 665 CREATE TABLE a (b DECIMAL[]) 666 667 statement ok 668 INSERT INTO a VALUES (ARRAY[1.1, 2.2, 3.3]) 669 670 query T 671 SELECT b FROM a 672 ---- 673 {1.1,2.2,3.3} 674 675 statement ok 676 DROP TABLE a 677 678 # Bytes array columns. 679 680 statement ok 681 CREATE TABLE a (b BYTES[]) 682 683 statement ok 684 INSERT INTO a VALUES (ARRAY['foo','bar','baz']) 685 686 query T 687 SELECT b FROM a 688 ---- 689 {"\\x666f6f","\\x626172","\\x62617a"} 690 691 statement ok 692 DROP TABLE a 693 694 # Date array columns. 695 696 statement ok 697 CREATE TABLE a (b DATE[]) 698 699 statement ok 700 INSERT INTO a VALUES (ARRAY[current_date]) 701 702 query I 703 SELECT count(b) FROM a 704 ---- 705 1 706 707 statement ok 708 DROP TABLE a 709 710 # Timestamp array columns. 711 712 statement ok 713 CREATE TABLE a (b TIMESTAMP[]) 714 715 statement ok 716 INSERT INTO a VALUES (ARRAY[now()]) 717 718 query I 719 SELECT count(b) FROM a 720 ---- 721 1 722 723 statement ok 724 DROP TABLE a 725 726 # Interval array columns. 727 728 statement ok 729 CREATE TABLE a (b INTERVAL[]) 730 731 statement ok 732 INSERT INTO a VALUES (ARRAY['1-2'::interval]) 733 734 query T 735 SELECT b FROM a 736 ---- 737 {"1 year 2 mons"} 738 739 statement ok 740 DROP TABLE a 741 742 # UUID array columns. 743 744 statement ok 745 CREATE TABLE a (b UUID[]) 746 747 statement ok 748 INSERT INTO a VALUES (ARRAY[uuid_v4()::uuid]) 749 750 query I 751 SELECT count(b) FROM a 752 ---- 753 1 754 755 statement ok 756 DROP TABLE a 757 758 # OID array columns. 759 760 statement ok 761 CREATE TABLE a (b OID[]) 762 763 statement ok 764 INSERT INTO a VALUES (ARRAY[1]) 765 766 query T 767 SELECT b FROM a 768 ---- 769 {1} 770 771 statement ok 772 DROP TABLE a 773 774 # Collated string array columns. 775 776 statement ok 777 CREATE TABLE a (b STRING[] COLLATE en) 778 779 statement ok 780 INSERT INTO a VALUES (ARRAY['hello' COLLATE en]), (ARRAY['goodbye' COLLATE en]) 781 782 query T rowsort 783 SELECT * FROM a 784 ---- 785 {hello} 786 {goodbye} 787 788 statement error value type collatedstring{fr}\[\] doesn't match type collatedstring{en}\[\] of column "b" 789 INSERT INTO a VALUES (ARRAY['hello' COLLATE fr]) 790 791 statement ok 792 DROP TABLE a 793 794 query T 795 SELECT * FROM unnest(ARRAY['a', 'B']) ORDER BY UNNEST; 796 ---- 797 B 798 a 799 800 query T 801 SELECT * FROM unnest(ARRAY['a' COLLATE en, 'B' COLLATE en]) ORDER BY UNNEST; 802 ---- 803 a 804 B 805 806 # TODO(justin): type system limitation 807 statement error unsupported binary operator 808 SELECT ARRAY['foo' COLLATE en] || ARRAY['bar' COLLATE en] 809 810 statement error unsupported binary operator 811 SELECT ARRAY['foo' COLLATE en] || 'bar' COLLATE en 812 813 statement ok 814 CREATE TABLE a (b STRING[]) 815 816 statement ok 817 INSERT INTO a VALUES (ARRAY['foo']) 818 819 statement error value type collatedstring{en}\[\] doesn't match type string\[\] of column "b" 820 INSERT INTO a VALUES (ARRAY['foo' COLLATE en]) 821 822 statement ok 823 DROP TABLE a 824 825 # Array operators 826 827 # Element append 828 829 # Postgres also requires that the string be explicitly casted, so we're no worse 830 # for wear despite this being a little annoying. 831 query T 832 SELECT ARRAY['a','b','c'] || 'd'::text 833 ---- 834 {a,b,c,d} 835 836 query error pq: could not parse "d" as type string\[\] 837 SELECT ARRAY['a','b','c'] || 'd' 838 839 query T 840 SELECT ARRAY[1,2,3] || 4 841 ---- 842 {1,2,3,4} 843 844 query T 845 SELECT NULL::INT[] || 4 846 ---- 847 {4} 848 849 query T 850 SELECT 4 || NULL::INT[] 851 ---- 852 {4} 853 854 query T 855 SELECT ARRAY[1,2,3] || NULL::INT 856 ---- 857 {1,2,3,NULL} 858 859 query T 860 SELECT NULL::INT[] || NULL::INT 861 ---- 862 {NULL} 863 864 query T 865 SELECT NULL::INT || ARRAY[1,2,3] 866 ---- 867 {NULL,1,2,3} 868 869 query TT 870 SELECT NULL::INT || NULL::INT[], NULL::INT[] || NULL::INT 871 ---- 872 {NULL} {NULL} 873 874 query T 875 SELECT 1 || ARRAY[2,3,4] 876 ---- 877 {1,2,3,4} 878 879 # This is a departure from Postgres' behavior. 880 # In Postgres, ARRAY[1,2,3] || NULL = ARRAY[1,2,3]. 881 882 query T 883 SELECT ARRAY[1,2,3] || NULL 884 ---- 885 {1,2,3} 886 887 query T 888 SELECT NULL || ARRAY[1,2,3] 889 ---- 890 {1,2,3} 891 892 # This test is here because its typechecking is related to the above 893 894 query TT 895 SELECT NULL || 'asdf', 'asdf' || NULL 896 ---- 897 NULL NULL 898 899 statement ok 900 CREATE TABLE a (b INT[]) 901 902 # Ensure arrays appended to still encode properly. 903 904 statement ok 905 INSERT INTO a VALUES (ARRAY[]) 906 907 statement ok 908 UPDATE a SET b = b || 1 909 910 statement ok 911 UPDATE a SET b = b || 2 912 913 statement ok 914 UPDATE a SET b = b || 3 915 916 statement ok 917 UPDATE a SET b = b || 4 918 919 query T 920 SELECT b FROM a 921 ---- 922 {1,2,3,4} 923 924 statement ok 925 UPDATE a SET b = NULL::INT || b || NULL::INT 926 927 query T 928 SELECT b FROM a 929 ---- 930 {NULL,1,2,3,4,NULL} 931 932 # Array append 933 934 query T 935 SELECT ARRAY[1,2,3] || ARRAY[4,5,6] 936 ---- 937 {1,2,3,4,5,6} 938 939 query T 940 SELECT ARRAY['a','b','c'] || ARRAY['d','e','f'] 941 ---- 942 {a,b,c,d,e,f} 943 944 query T 945 SELECT ARRAY[1,2,3] || NULL::INT[] 946 ---- 947 {1,2,3} 948 949 query T 950 SELECT NULL::INT[] || ARRAY[4,5,6] 951 ---- 952 {4,5,6} 953 954 query T 955 SELECT NULL::INT[] || NULL::INT[] 956 ---- 957 NULL 958 959 # Array equality 960 961 query B 962 SELECT ARRAY[1,2,3] = ARRAY[1,2,3] 963 ---- 964 true 965 966 query B 967 SELECT ARRAY[1,2,4] = ARRAY[1,2,3] 968 ---- 969 false 970 971 query B 972 SELECT ARRAY[1,2,3] != ARRAY[1,2,3] 973 ---- 974 false 975 976 query B 977 SELECT ARRAY[1,2,4] != ARRAY[1,2,3] 978 ---- 979 true 980 981 query B 982 SELECT ARRAY[1,2,4] = NULL 983 ---- 984 NULL 985 986 # This behavior is surprising (one might expect that the result would be 987 # NULL), but it's how Postgres behaves. 988 query B 989 SELECT ARRAY[1,2,NULL] = ARRAY[1,2,3] 990 ---- 991 false 992 993 # ARRAY_APPEND function 994 995 query TT 996 SELECT array_append(ARRAY[1,2,3], 4), array_append(ARRAY[1,2,3], NULL::INT) 997 ---- 998 {1,2,3,4} {1,2,3,NULL} 999 1000 query TT 1001 SELECT array_append(NULL::INT[], 4), array_append(NULL::INT[], NULL::INT) 1002 ---- 1003 {4} {NULL} 1004 1005 # ARRAY_PREPEND function 1006 1007 query TT 1008 SELECT array_prepend(4, ARRAY[1,2,3]), array_prepend(NULL::INT, ARRAY[1,2,3]) 1009 ---- 1010 {4,1,2,3} {NULL,1,2,3} 1011 1012 query TT 1013 SELECT array_prepend(4, NULL::INT[]), array_prepend(NULL::INT, NULL::INT[]) 1014 ---- 1015 {4} {NULL} 1016 1017 # ARRAY_CAT function 1018 1019 query TT 1020 SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5,6]), array_cat(ARRAY[1,2,3], NULL::INT[]) 1021 ---- 1022 {1,2,3,4,5,6} {1,2,3} 1023 1024 query TT 1025 SELECT array_cat(NULL::INT[], ARRAY[4,5,6]), array_cat(NULL::INT[], NULL::INT[]) 1026 ---- 1027 {4,5,6} NULL 1028 1029 # ARRAY_REMOVE function 1030 1031 query T 1032 SELECT array_remove(ARRAY[1,2,3,2], 2) 1033 ---- 1034 {1,3} 1035 1036 query T 1037 SELECT array_remove(ARRAY[1,2,3,NULL::INT], NULL::INT) 1038 ---- 1039 {1,2,3} 1040 1041 query T 1042 SELECT array_remove(NULL::INT[], NULL::INT) 1043 ---- 1044 NULL 1045 1046 # ARRAY_REPLACE function 1047 1048 query T 1049 SELECT array_replace(ARRAY[1,2,5,4], 5, 3) 1050 ---- 1051 {1,2,3,4} 1052 1053 query TT 1054 SELECT array_replace(ARRAY[1,2,NULL,4], NULL::INT, 3), array_replace(NULL::INT[], 5, 3) 1055 ---- 1056 {1,2,3,4} NULL 1057 1058 # ARRAY_POSITION function 1059 1060 query I 1061 SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'mon') 1062 ---- 1063 2 1064 1065 query I 1066 SELECT array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat','mon'], 'abc') 1067 ---- 1068 NULL 1069 1070 query I 1071 SELECT array_position(NULL::STRING[], 'abc') 1072 ---- 1073 NULL 1074 1075 # ARRAY_POSITIONS function 1076 1077 query TT 1078 SELECT array_positions(ARRAY['A','A','B','A'], 'A'), array_positions(ARRAY['A','A','B','A'], 'C') 1079 ---- 1080 {1,2,4} {} 1081 1082 query T 1083 SELECT array_positions(NULL::STRING[], 'A') 1084 ---- 1085 NULL 1086 1087 query T 1088 SELECT string_to_array('axbxc', 'x') 1089 ---- 1090 {a,b,c} 1091 1092 query T 1093 SELECT string_to_array('~a~~b~c', '~') 1094 ---- 1095 {"",a,"",b,c} 1096 1097 query T 1098 SELECT string_to_array('~foo~~bar~baz', '~', 'bar') 1099 ---- 1100 {"",foo,"",NULL,baz} 1101 1102 query T 1103 SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') 1104 ---- 1105 {xx,NULL,zz} 1106 1107 query T 1108 SELECT string_to_array('foo', '') 1109 ---- 1110 {foo} 1111 1112 query T 1113 SELECT string_to_array('', '') 1114 ---- 1115 {} 1116 1117 query T 1118 SELECT string_to_array('', 'foo') 1119 ---- 1120 {} 1121 1122 query T 1123 SELECT string_to_array('a', NULL) 1124 ---- 1125 {a} 1126 1127 query T 1128 SELECT string_to_array(NULL, 'a') 1129 ---- 1130 NULL 1131 1132 query T 1133 SELECT string_to_array(NULL, 'a', 'b') 1134 ---- 1135 NULL 1136 1137 query T 1138 SELECT string_to_array('a', 'foo', NULL) 1139 ---- 1140 {a} 1141 1142 query T 1143 SELECT string_to_array('foofoofoofoo', 'foo', 'foo') 1144 ---- 1145 {"","","","",""} 1146 1147 # Regression test for #23429. 1148 1149 statement ok 1150 CREATE TABLE x (a STRING[], b INT[]) 1151 1152 statement ok 1153 UPDATE x SET a = ARRAY[], b = ARRAY[] 1154 1155 1156 # Github Issue 24175: Regression test for error when using ANY with UUID array. 1157 statement ok 1158 CREATE TABLE documents (shared_users UUID[]); 1159 1160 statement ok 1161 INSERT INTO documents 1162 VALUES 1163 (ARRAY[]), 1164 (ARRAY['3ae3560e-d771-4b63-affb-47e8d7853680'::UUID, 1165 '6CC1B5C1-FE4F-417D-96BD-AFD1FEEEC34F'::UUID]), 1166 (ARRAY['C6F8286C-3A41-4D7E-A4F4-3234B7A57BA9'::UUID]) 1167 1168 query T 1169 SELECT * 1170 FROM documents 1171 WHERE '3ae3560e-d771-4b63-affb-47e8d7853680'::UUID = ANY (documents.shared_users); 1172 ---- 1173 {3ae3560e-d771-4b63-affb-47e8d7853680,6cc1b5c1-fe4f-417d-96bd-afd1feeec34f} 1174 1175 statement ok 1176 CREATE TABLE u (x INT) 1177 1178 statement ok 1179 INSERT INTO u VALUES (1), (2) 1180 1181 statement ok 1182 CREATE TABLE v (y INT[]) 1183 1184 statement ok 1185 INSERT INTO v VALUES (ARRAY[1, 2]) 1186 1187 # Regression test for #30191. Ensure ArrayFlatten returns correct type. 1188 query T 1189 SELECT * FROM v WHERE y = ARRAY(SELECT x FROM u ORDER BY x); 1190 ---- 1191 {1,2} 1192 1193 # Regression test for #34439. Ensure that empty arrays are interned correctly. 1194 query B 1195 SELECT ARRAY[''] = ARRAY[] FROM (VALUES (1)) WHERE ARRAY[B''] != ARRAY[] 1196 ---- 1197 false 1198 1199 subtest 36477 1200 1201 statement ok 1202 CREATE TABLE array_single_family (a INT PRIMARY KEY, b INT[], FAMILY fam0(a), FAMILY fam1(b)) 1203 1204 statement ok 1205 INSERT INTO array_single_family VALUES(0,ARRAY[]) 1206 1207 statement ok 1208 INSERT INTO array_single_family VALUES(1,ARRAY[1]) 1209 1210 statement ok 1211 INSERT INTO array_single_family VALUES(2,ARRAY[1,2]) 1212 1213 statement ok 1214 INSERT INTO array_single_family VALUES(3,ARRAY[1,2,NULL]) 1215 1216 statement ok 1217 INSERT INTO array_single_family VALUES(4,ARRAY[NULL,2,3]) 1218 1219 statement ok 1220 INSERT INTO array_single_family VALUES(5,ARRAY[1,NULL,3]) 1221 1222 statement ok 1223 INSERT INTO array_single_family VALUES(6,ARRAY[NULL::INT]) 1224 1225 statement ok 1226 INSERT INTO array_single_family VALUES(7,ARRAY[NULL::INT,NULL::INT]) 1227 1228 statement ok 1229 INSERT INTO array_single_family VALUES(8,ARRAY[NULL::INT,NULL::INT,NULL::INT]) 1230 1231 query IT colnames 1232 SELECT a, b FROM array_single_family ORDER BY a 1233 ---- 1234 a b 1235 0 {} 1236 1 {1} 1237 2 {1,2} 1238 3 {1,2,NULL} 1239 4 {NULL,2,3} 1240 5 {1,NULL,3} 1241 6 {NULL} 1242 7 {NULL,NULL} 1243 8 {NULL,NULL,NULL} 1244 1245 statement ok 1246 DROP TABLE array_single_family 1247 1248 query TT 1249 SELECT ARRAY[]::int[], ARRAY[]:::int[] 1250 ---- 1251 {} {} 1252 1253 subtest 37544 1254 1255 query T 1256 SELECT 1257 col_1 1258 FROM 1259 ( 1260 VALUES 1261 (ARRAY[]::INT8[]), 1262 (ARRAY[]::INT8[]) 1263 ) 1264 AS tab_1 (col_1) 1265 GROUP BY 1266 tab_1.col_1 1267 ---- 1268 {} 1269 1270 # Regression test for #38293. 1271 statement ok 1272 CREATE TABLE defvals ( 1273 id SERIAL NOT NULL PRIMARY KEY, 1274 arr1 STRING(100) ARRAY NOT NULL DEFAULT ARRAY[], 1275 arr2 INT ARRAY NOT NULL DEFAULT ARRAY[] 1276 ) 1277 1278 statement ok 1279 INSERT INTO defvals(id) VALUES (1) 1280 1281 statement ok 1282 CREATE TABLE defvals2 ( 1283 id SERIAL NOT NULL PRIMARY KEY, 1284 arr1 STRING(100) ARRAY NOT NULL DEFAULT ARRAY[NULL], 1285 arr2 INT ARRAY NOT NULL DEFAULT ARRAY[NULL] 1286 ) 1287 1288 statement ok 1289 INSERT INTO defvals2(id) VALUES (1) 1290 1291 subtest array_compare 1292 1293 statement ok 1294 DROP TABLE IF EXISTS t; 1295 CREATE TABLE t (x INT[], y INT[], z STRING[]) 1296 1297 statement error pq: unsupported comparison operator: <int\[\]> < <string\[\]> 1298 SELECT * FROM t WHERE y < z 1299 1300 statement ok 1301 INSERT INTO t VALUES (ARRAY[1], ARRAY[1, 2], NULL), (ARRAY[1, 1, 1, 1], ARRAY[2], NULL) 1302 1303 query TT rowsort 1304 SELECT x, y FROM t WHERE x < y 1305 ---- 1306 {1} {1,2} 1307 {1,1,1,1} {2} 1308 1309 query TT 1310 SELECT x, y FROM t WHERE x > y 1311 ---- 1312 1313 query TT 1314 SELECT x, y FROM t ORDER BY (x, y) 1315 ---- 1316 {1} {1,2} 1317 {1,1,1,1} {2} 1318 1319 subtest array_indexes 1320 1321 # Create indexes on arrays. 1322 statement ok 1323 DROP TABLE IF EXISTS t; 1324 CREATE TABLE t (x INT[] PRIMARY KEY) 1325 1326 statement ok 1327 INSERT INTO t VALUES 1328 (ARRAY[1]), 1329 (ARRAY[5]), 1330 (ARRAY[4]), 1331 (ARRAY[1,4,5]), 1332 (ARRAY[1,4,6]), 1333 (ARRAY[1,NULL,10]), 1334 (ARRAY[NULL]), 1335 (ARRAY[NULL, NULL, NULL]) 1336 1337 # Test that the unique index rejects bad inserts. 1338 statement error pq: duplicate key value \(x\)=\(ARRAY\[1,NULL,10\]\) violates unique constraint "primary" 1339 INSERT INTO t VALUES (ARRAY[1, NULL, 10]) 1340 1341 query T 1342 SELECT x FROM t ORDER BY x 1343 ---- 1344 {NULL} 1345 {NULL,NULL,NULL} 1346 {1} 1347 {1,NULL,10} 1348 {1,4,5} 1349 {1,4,6} 1350 {4} 1351 {5} 1352 1353 # Use the index for point lookups. 1354 query T 1355 SELECT x FROM t WHERE x = ARRAY[1,4,6] 1356 ---- 1357 {1,4,6} 1358 1359 # Use the index for bounded scans. 1360 # Note that nulls sort first in CockroachDB, so this ordering is different 1361 # than what postgres will output. In postgres, NULLs in arrays are treated 1362 # as larger than other elements, while we treat them as less. 1363 # TODO (rohany): We have always done this for array comparisons, so I think 1364 # it would be a breaking change + opposite with our other null behavior to 1365 # change it suddenly... 1366 query T 1367 SELECT x FROM t WHERE x < ARRAY[1, 4, 3] ORDER BY x 1368 ---- 1369 {NULL} 1370 {NULL,NULL,NULL} 1371 {1} 1372 {1,NULL,10} 1373 1374 query T 1375 SELECT x FROM t WHERE x > ARRAY [1, NULL] ORDER BY x DESC 1376 ---- 1377 {5} 1378 {4} 1379 {1,4,6} 1380 {1,4,5} 1381 {1,NULL,10} 1382 1383 query T 1384 SELECT x FROM t WHERE x > ARRAY[1, 3] AND x < ARRAY[1, 4, 10] ORDER BY x 1385 ---- 1386 {1,4,5} 1387 {1,4,6} 1388 1389 query T 1390 SELECT x FROM t WHERE x > ARRAY[NULL, NULL]:::INT[] ORDER BY x 1391 ---- 1392 {NULL,NULL,NULL} 1393 {1} 1394 {1,NULL,10} 1395 {1,4,5} 1396 {1,4,6} 1397 {4} 1398 {5} 1399 1400 # Test some operations on a descending index. 1401 statement ok 1402 CREATE INDEX i ON t(x DESC) 1403 1404 query T 1405 SELECT x FROM t@i WHERE x <= ARRAY[1] ORDER BY x DESC 1406 ---- 1407 {1} 1408 {NULL,NULL,NULL} 1409 {NULL} 1410 1411 query T 1412 SELECT x FROM t@i WHERE x > ARRAY[1] ORDER BY x 1413 ---- 1414 {1,NULL,10} 1415 {1,4,5} 1416 {1,4,6} 1417 {4} 1418 {5} 1419 1420 # Ensure that we can order by the arrays without any indexes. 1421 statement ok 1422 DROP TABLE t; 1423 CREATE TABLE t (x INT[]); 1424 INSERT INTO t VALUES 1425 (ARRAY[1]), 1426 (ARRAY[5]), 1427 (ARRAY[4]), 1428 (ARRAY[1,4,5]), 1429 (ARRAY[1,4,6]), 1430 (ARRAY[1,NULL,10]), 1431 (ARRAY[NULL]), 1432 (ARRAY[NULL, NULL, NULL]) 1433 1434 query T 1435 SELECT x FROM t ORDER BY x 1436 ---- 1437 {NULL} 1438 {NULL,NULL,NULL} 1439 {1} 1440 {1,NULL,10} 1441 {1,4,5} 1442 {1,4,6} 1443 {4} 1444 {5} 1445 1446 query T 1447 SELECT x FROM t ORDER BY x DESC 1448 ---- 1449 {5} 1450 {4} 1451 {1,4,6} 1452 {1,4,5} 1453 {1,NULL,10} 1454 {1} 1455 {NULL,NULL,NULL} 1456 {NULL} 1457 1458 statement ok 1459 CREATE INDEX i ON t (x); 1460 INSERT INTO t VALUES (NULL), (NULL) 1461 1462 # Test that NULL's are differentiated from {NULL}. 1463 query T 1464 SELECT x FROM t@i WHERE x IS NOT NULL ORDER BY x 1465 ---- 1466 {NULL} 1467 {NULL,NULL,NULL} 1468 {1} 1469 {1,NULL,10} 1470 {1,4,5} 1471 {1,4,6} 1472 {4} 1473 {5} 1474 1475 # Create an indexes on a bad type. 1476 statement error pq: unimplemented: column x is of type geography\[\] and thus is not indexable 1477 CREATE TABLE tbad (x GEOGRAPHY[] PRIMARY KEY) 1478 1479 # Test arrays of composite types. 1480 statement ok 1481 CREATE TABLE tarray(x DECIMAL[] PRIMARY KEY); 1482 INSERT INTO tarray VALUES (ARRAY[1.00]), (ARRAY[1.501]) 1483 1484 # Ensure these are round tripped correctly. 1485 query T 1486 SELECT x FROM tarray ORDER BY x 1487 ---- 1488 {1.00} 1489 {1.501} 1490 1491 # Test indexes on multiple columns with arrays. 1492 statement ok 1493 DROP TABLE t; 1494 CREATE TABLE t (x INT, y INT[], z INT, INDEX i (x, y, z)); 1495 INSERT INTO t VALUES 1496 (1, ARRAY[1, 2, 3], 3), 1497 (NULL, ARRAY[1, NULL, 3], NULL), 1498 (2, ARRAY[NULL, NULL, NULL], NULL), 1499 (NULL, ARRAY[NULL, NULL], 3), 1500 (2, ARRAY[4, 5], 7) 1501 1502 query ITI 1503 SELECT x, y, z FROM t WHERE x IS NOT NULL AND y > ARRAY[1] ORDER BY z 1504 ---- 1505 1 {1,2,3} 3 1506 2 {4,5} 7 1507 1508 query ITI 1509 SELECT x, y, z FROM t WHERE x = 2 AND y < ARRAY[10] ORDER BY y 1510 ---- 1511 2 {NULL,NULL,NULL} NULL 1512 2 {4,5} 7 1513 1514 # Test that interleaving an array index doesn't lead to problems. 1515 statement ok 1516 DROP TABLE IF EXISTS parent, child CASCADE; 1517 CREATE TABLE parent (x INT, y INT[], PRIMARY KEY (x, y DESC)); 1518 CREATE TABLE child (x INT, y INT[], z INT[], PRIMARY KEY (x, y DESC, z)) INTERLEAVE IN PARENT parent (x, y); 1519 INSERT INTO parent VALUES 1520 (1, ARRAY[1, 2, 3]), 1521 (1, ARRAY[1, NULL]), 1522 (2, ARRAY[NULL]), 1523 (3, ARRAY[NULL, 1, NULL]); 1524 INSERT INTO child VALUES 1525 (1, ARRAY[1, 2, 3], ARRAY[4]), 1526 (1, ARRAY[1, 2, 3, 4], ARRAY[5]), 1527 (1, ARRAY[1, NULL], ARRAY[5]), 1528 (1, ARRAY[1, NULL, NULL], ARRAY[10]), 1529 (2, ARRAY[NULL], ARRAY[1]), 1530 (3, ARRAY[NULL, 1, NULL], ARRAY[3]); 1531 1532 # Ensure scans on the parent and child aren't affected. 1533 query IT 1534 SELECT x, y FROM parent ORDER BY x, y DESC 1535 ---- 1536 1 {1,2,3} 1537 1 {1,NULL} 1538 2 {NULL} 1539 3 {NULL,1,NULL} 1540 1541 query ITT 1542 SELECT x, y, z FROM child ORDER BY x, y DESC, z 1543 ---- 1544 1 {1,2,3,4} {5} 1545 1 {1,2,3} {4} 1546 1 {1,NULL,NULL} {10} 1547 1 {1,NULL} {5} 1548 2 {NULL} {1} 1549 3 {NULL,1,NULL} {3} 1550 1551 # Test arrays of strings. 1552 statement ok 1553 DROP TABLE t; 1554 CREATE TABLE t (x STRING[] PRIMARY KEY); 1555 INSERT INTO t VALUES 1556 (ARRAY['']), 1557 (ARRAY['hello', 'hi\nthere']), 1558 (ARRAY['another', 'string', 'in', 'my', 'array']), 1559 (ARRAY['this', 'array', NULL, 'has', NULL]) 1560 1561 query T 1562 SELECT x FROM t ORDER BY x DESC 1563 ---- 1564 {this,array,NULL,has,NULL} 1565 {hello,"hi\\nthere"} 1566 {another,string,in,my,array} 1567 {""} 1568 1569 query T 1570 SELECT x FROM t WHERE x > ARRAY['hell'] AND x < ARRAY['i'] 1571 ---- 1572 {hello,"hi\\nthere"} 1573 1574 # Test arrays of bytes, and insert some bytes that are used by the 1575 # array encoding itself. 1576 statement ok 1577 DROP TABLE t; 1578 CREATE TABLE t (x BYTES[] PRIMARY KEY); 1579 INSERT INTO t VALUES 1580 (ARRAY[b'\xFF', b'\x00']), 1581 (ARRAY[NULL, b'\x01', b'\x01', NULL]), 1582 (ARRAY[NULL, b'\xFF']) 1583 1584 query T 1585 SELECT x FROM t ORDER BY x 1586 ---- 1587 {NULL,"\\x01","\\x01",NULL} 1588 {NULL,"\\xff"} 1589 {"\\xff","\\x00"} 1590 1591 # Repeat the above test with a descending encoding. 1592 statement ok 1593 DROP TABLE t; 1594 CREATE TABLE t (x BYTES[], PRIMARY KEY (x DESC)); 1595 INSERT INTO t VALUES 1596 (ARRAY[b'\xFF', b'\x00']), 1597 (ARRAY[NULL, b'\x01', b'\x01', NULL]), 1598 (ARRAY[NULL, b'\xFF']) 1599 1600 query T 1601 SELECT x FROM t ORDER BY x 1602 ---- 1603 {NULL,"\\x01","\\x01",NULL} 1604 {NULL,"\\xff"} 1605 {"\\xff","\\x00"} 1606 1607 # Test some indexes with multiple array columns. 1608 statement ok 1609 DROP TABLE t; 1610 CREATE TABLE t (x INT[], y INT[], PRIMARY KEY (x, y)); 1611 INSERT INTO t VALUES 1612 (ARRAY[1, 2], ARRAY[3, 4]), 1613 (ARRAY[NULL, NULL], ARRAY[NULL, NULL]), 1614 (ARRAY[], ARRAY[]), 1615 (ARRAY[], ARRAY[NULL, 2]), 1616 (ARRAY[NULL], ARRAY[]) 1617 1618 query TT 1619 SELECT x, y FROM t ORDER BY x, y 1620 ---- 1621 {} {} 1622 {} {NULL,2} 1623 {NULL} {} 1624 {NULL,NULL} {NULL,NULL} 1625 {1,2} {3,4} 1626 1627 query TT 1628 SELECT x, y FROM t WHERE x > ARRAY[NULL]:::INT[] ORDER BY y 1629 ---- 1630 {NULL,NULL} {NULL,NULL} 1631 {1,2} {3,4} 1632 1633 # Test that we can create foreign key references on arrays. 1634 statement ok 1635 DROP TABLE IF EXISTS t1, t2 CASCADE; 1636 CREATE TABLE t1 (x INT[] PRIMARY KEY); 1637 CREATE TABLE t2 (x INT[] PRIMARY KEY); 1638 ALTER TABLE t2 ADD FOREIGN KEY (x) REFERENCES t1 (x) 1639 1640 statement ok 1641 INSERT INTO t1 VALUES (ARRAY[1, 2, NULL, 3]) 1642 1643 statement error pq: insert on table "t2" violates foreign key constraint "fk_x_ref_t1" 1644 INSERT INTO t2 VALUES (ARRAY[1, 2]) 1645 1646 statement ok 1647 INSERT INTO t2 VALUES (ARRAY[1, 2, NULL, 3]) 1648 1649 statement error pq: delete on table "t1" violates foreign key constraint "fk_x_ref_t1" on table "t2" 1650 DELETE FROM t1 WHERE x > ARRAY[1] 1651 1652 # Test different joins on indexed arrays. 1653 statement ok 1654 DROP TABLE IF EXISTS t1, t2 CASCADE; 1655 CREATE TABLE t1 (x INT[] PRIMARY KEY); 1656 CREATE TABLE t2 (x INT[] PRIMARY KEY); 1657 INSERT INTO t1 VALUES 1658 (ARRAY[1, 2]), 1659 (ARRAY[NULL]), 1660 (ARRAY[3, 4]); 1661 INSERT INTO t2 VALUES 1662 (ARRAY[]), 1663 (ARRAY[1, 2]), 1664 (ARRAY[NULL]) 1665 1666 query T rowsort 1667 SELECT t1.x FROM t1 INNER HASH JOIN t2 ON t1.x = t2.x 1668 ---- 1669 {NULL} 1670 {1,2} 1671 1672 query T rowsort 1673 SELECT t1.x FROM t1 INNER MERGE JOIN t2 ON t1.x = t2.x 1674 ---- 1675 {NULL} 1676 {1,2} 1677 1678 query T rowsort 1679 SELECT t1.x FROM t1 INNER LOOKUP JOIN t2 ON t1.x = t2.x 1680 ---- 1681 {NULL} 1682 {1,2} 1683 1684 # Test that we can group by arrays. 1685 statement ok 1686 DROP TABLE t; 1687 CREATE TABLE t (x INT[], INDEX (x)); 1688 INSERT INTO t VALUES 1689 (ARRAY[1, 2]), 1690 (ARRAY[1, 2]), 1691 (ARRAY[1, 2]), 1692 (ARRAY[NULL, NULL]), 1693 (ARRAY[NULL, NULL]), 1694 (ARRAY[1,2,NULL,4,NULL]), 1695 (ARRAY[1,2,NULL,4,NULL]) 1696 1697 query T rowsort 1698 SELECT x FROM t GROUP BY x 1699 ---- 1700 {1,2} 1701 {NULL,NULL} 1702 {1,2,NULL,4,NULL}