github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/logictest/testdata/logic_test/builtin_function (about) 1 # 3node-tenant fails due to: 2 # https://github.com/cockroachdb/cockroach/issues/48375 3 # Specifically, a status server is unavailable when attempting to set a zone 4 # config. 5 # LogicTest: !3node-tenant 6 7 statement ok 8 CREATE TABLE foo (a int) 9 10 statement ok 11 INSERT INTO foo (a) VALUES (1) 12 13 query error unknown function: foo.bar 14 SELECT foo.bar() 15 16 query error unknown function: defaults 17 SELECT defaults() 18 19 query II colnames 20 SELECT length('roach7'), length(b'roach77') 21 ---- 22 length length 23 6 7 24 25 query IIIIII 26 SELECT length('Hello, 世界'), length(b'Hello, 世界'), 27 char_length('Hello, 世界'), char_length(b'Hello, 世界'), 28 character_length('Hello, 世界'), character_length(b'Hello, 世界') 29 ---- 30 9 13 9 13 9 13 31 32 statement error unknown signature: length\(int\) 33 SELECT length(23) 34 35 query III 36 SELECT octet_length('Hello'), octet_length('世界'), octet_length(b'世界') 37 ---- 38 5 6 6 39 40 query III 41 SELECT bit_length('Hello'), bit_length('世界'), bit_length(b'世界') 42 ---- 43 40 48 48 44 45 query TTTTTTTT 46 SELECT quote_ident('abc'), quote_ident('ab.c'), quote_ident('ab"c'), quote_ident('世界'), 47 quote_ident('array'), -- reserved keyword 48 quote_ident('family'), -- type/func name keyword 49 quote_ident('bigint'), -- col name keyword 50 quote_ident('alter') -- unreserved keyword 51 ---- 52 abc "ab.c" "ab""c" 世界 "array" "family" "bigint" alter 53 54 query TTTT 55 SELECT quote_literal('abc'), quote_literal('ab''c'), quote_literal('ab"c'), quote_literal(e'ab\nc') 56 ---- 57 'abc' e'ab\'c' 'ab"c' e'ab\nc' 58 59 query TTTTTTTT 60 SELECT 61 quote_literal(123::string), quote_nullable(123::string), 62 quote_literal(123), quote_nullable(123), 63 quote_literal(true), quote_nullable(true), 64 quote_literal(123.3), quote_nullable(123.3) 65 ---- 66 '123' '123' '123' '123' 'true' 'true' '123.3' '123.3' 67 68 query TTTTTT 69 SELECT 70 quote_literal('1d'::interval), quote_nullable('1d'::interval), 71 quote_literal('2018-06-11 12:13:14'::timestamp), quote_nullable('2018-06-11 12:13:14'::timestamp), 72 quote_literal('2018-06-11'::date), quote_nullable('2018-06-11'::date) 73 ---- 74 '1 day' '1 day' '2018-06-11 12:13:14+00:00' '2018-06-11 12:13:14+00:00' '2018-06-11' '2018-06-11' 75 76 query TTBB 77 SELECT 78 quote_literal(null::int), quote_nullable(null::int), 79 quote_literal(null::int) IS NULL, quote_nullable(null::int) IS NULL 80 ---- 81 NULL NULL true false 82 83 # Check that quote_literal is properly sensitive to bytea_output. 84 85 query TT 86 SELECT quote_literal(b'abc'), quote_nullable(b'abc') 87 ---- 88 e'\\x616263' e'\\x616263' 89 90 statement ok 91 SET bytea_output = 'escape' 92 93 query TT 94 SELECT quote_literal(b'abc'), quote_nullable(b'abc') 95 ---- 96 'abc' 'abc' 97 98 statement ok 99 RESET bytea_output 100 101 query T colnames 102 SELECT upper('roacH7') 103 ---- 104 upper 105 ROACH7 106 107 statement error unknown signature: upper\(decimal\) 108 SELECT upper(2.2) 109 110 query T colnames 111 SELECT lower('RoacH7') 112 ---- 113 lower 114 roach7 115 116 statement error unknown signature: lower\(int\) 117 SELECT lower(32) 118 119 # Multiplying by zero so the result is deterministic. 120 query R 121 SELECT random() * 0.0 122 ---- 123 0 124 125 # Concatenating 'empty' because the empty string doesn't work in these tests. 126 query T 127 SELECT concat() || 'empty' 128 ---- 129 empty 130 131 query T 132 SELECT concat('RoacH', NULL) 133 ---- 134 RoacH 135 136 statement error unknown signature: concat\(string, bool, decimal, bool\) 137 SELECT concat('RoacH', false, 64.532, TRUE) 138 139 query T 140 SELECT substr('RoacH', 2, 3) 141 ---- 142 oac 143 144 query T 145 SELECT substring('RoacH', 2, 3) 146 ---- 147 oac 148 149 query T 150 SELECT substring('💩oacH', 2, 3) 151 ---- 152 oac 153 154 query T 155 SELECT substring('RoacH' from 2 for 3) 156 ---- 157 oac 158 159 query T 160 SELECT substring('RoacH' for 3 from 2) 161 ---- 162 oac 163 164 query T 165 SELECT substr('RoacH', 2) 166 ---- 167 oacH 168 169 query T 170 SELECT substr('💩oacH', 2) 171 ---- 172 oacH 173 174 query T 175 SELECT substring('RoacH' from 2) 176 ---- 177 oacH 178 179 query T 180 SELECT substr('RoacH', -2) 181 ---- 182 RoacH 183 184 query T 185 SELECT substr('RoacH', -2, 4) 186 ---- 187 R 188 189 query T 190 SELECT substr('12345', 2, 77) 191 ---- 192 2345 193 194 query T 195 SELECT substr('12345', -2, 77) 196 ---- 197 12345 198 199 statement error substr\(\): negative substring length -1 not allowed 200 SELECT substr('12345', 2, -1) 201 202 query T 203 SELECT substr('string', 4827075662841736053, 5123273972570225659) || 'empty' 204 ---- 205 empty 206 207 query T 208 SELECT substring('12345' for 3) 209 ---- 210 123 211 212 query T 213 SELECT substring('foobar' from 'o.b') 214 ---- 215 oob 216 217 query T 218 SELECT substring('f(oabaroob' from '\(o(.)b') 219 ---- 220 a 221 222 query T 223 SELECT substring('f(oabaroob' from '+(o(.)b' for '+') 224 ---- 225 a 226 227 query error substring\(\): error parsing regexp: missing closing \): `\\\\\(o\(.\)b` 228 SELECT substring('f(oabaroob' from '\(o(.)b' for '+') 229 230 query error unknown signature: substring\(\) 231 SELECT substring() 232 233 # Adding testcases for substring against bit array. 234 235 query TTT 236 SELECT substring(B'11110000', 0), substring(B'11110000', -1), substring(B'11110000', 5) 237 ---- 238 11110000 11110000 0000 239 240 query TTT 241 SELECT substring(B'11110000', 8), substring(B'11110000', 10), substring(B'', 0) 242 ---- 243 0 · · 244 245 query TTT 246 SELECT substring('11100011'::bit(8), 4), substring('11100011'::bit(6), 4), substring(B'', 0, 1) 247 ---- 248 00011 000 · 249 250 query TTT 251 SELECT substring(B'11110000', 0, 4), substring(B'11110000', -1, 4), substring(B'11110000', 5, 10) 252 ---- 253 111 11 0000 254 255 query TTT 256 SELECT substring(B'11110000', 8, 1), substring(B'11110000', 8, 0), substring(B'11110000', 10, 5) 257 ---- 258 0 · · 259 260 query TT 261 SELECT substring('11100011'::bit(10), 4, 10), substring('11100011'::bit(8), 1, 8) 262 ---- 263 0001100 11100011 264 265 query TTT 266 SELECT substring(B'10001000' FOR 4 FROM 0), substring(B'10001000' FROM 0 FOR 4), substring(B'10001000' FOR 4) 267 ---- 268 100 100 1000 269 270 query error substring\(\): negative bit subarray length -1 not allowed 271 SELECT substring('11100011'::bit(10), 4, -1) 272 273 # Adding testcases for substring against byte array. 274 275 query TT 276 SELECT substring(b'abc', 0), substring(b'\x61\x62\x63', -1) 277 ---- 278 abc abc 279 280 query TT 281 SELECT substring(b'abc', 3), substring(b'abc', 5) 282 ---- 283 c · 284 285 query T 286 SELECT substring('abc'::bytea, 0) 287 ---- 288 abc 289 290 query TT 291 SELECT substring(b'\x61\x62\x63', 0, 4), substring(b'abc', -1, 4) 292 ---- 293 abc ab 294 295 query TTT 296 SELECT substring(b'abc', 3, 1), substring(b'abc', 3, 0), substring(b'abc', 4, 3) 297 ---- 298 c · · 299 300 query T 301 SELECT substring('abc'::bytea, 0, 4) 302 ---- 303 abc 304 305 query TTT 306 SELECT substring(b'abc' FOR 3 FROM 1), substring(b'abc' FROM 1 FOR 3), substring(b'abc' FOR 3) 307 ---- 308 abc abc abc 309 310 query error substring\(\): negative byte subarray length -1 not allowed 311 SELECT substring('11100011'::bytea, 4, -1) 312 313 query error unknown signature: concat_ws\(\) 314 SELECT concat_ws() 315 316 query T 317 SELECT concat_ws(NULL::STRING, 'a', 'b') 318 ---- 319 NULL 320 321 query T 322 SELECT concat_ws(',', 'abcde', NULL) 323 ---- 324 abcde 325 326 query T 327 SELECT concat_ws(',', 'abcde', '2') 328 ---- 329 abcde,2 330 331 statement error unknown signature: concat_ws\(string, string, int, unknown, int\) 332 SELECT concat_ws(',', 'abcde', 2, NULL, 22) 333 334 query T 335 SELECT split_part('abc~@~def~@~ghi', '~@~', 2) 336 ---- 337 def 338 339 query T 340 SELECT repeat('Pg', 4) 341 ---- 342 PgPgPgPg 343 344 query T 345 SELECT repeat('Pg', -1) || 'empty' 346 ---- 347 empty 348 349 statement error pq: repeat\(\): requested length too large 350 SELECT repeat('s', 9223372036854775807) 351 352 # Regression for #19035. 353 statement error pq: repeat\(\): requested length too large 354 SELECT repeat('1234567890'::string, 6978072892806141784::int) 355 356 query I 357 SELECT ascii('x') 358 ---- 359 120 360 361 query I 362 select ascii('禅') 363 ---- 364 31109 365 366 query error ascii\(\): the input string must not be empty 367 select ascii('') 368 369 query T 370 select chr(122) 371 ---- 372 z 373 374 query T 375 select chr(ascii('Z')) 376 ---- 377 Z 378 379 query T 380 select chr(31109) 381 ---- 382 禅 383 384 query error chr\(\): input value must be >= 0 385 SELECT chr(-1) 386 387 query T 388 SELECT md5('abc') 389 ---- 390 900150983cd24fb0d6963f7d28e17f72 391 392 query T 393 SELECT sha1('abc') 394 ---- 395 a9993e364706816aba3e25717850c26c9cd0d89d 396 397 query T 398 SELECT sha256('abc') 399 ---- 400 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad 401 402 query IIII 403 SELECT fnv32('abc'), fnv32a('abc'), fnv64('abc'), fnv64a('abc') 404 ---- 405 1134309195 440920331 -2820157060406071861 -1792535898324117685 406 407 query II 408 SELECT crc32ieee('abc'), crc32c('abc') 409 ---- 410 891568578 910901175 411 412 # Regression tests for #29754 413 query T 414 SELECT md5(NULL::STRING) 415 ---- 416 NULL 417 418 query T 419 SELECT md5('') 420 ---- 421 d41d8cd98f00b204e9800998ecf8427e 422 423 query T 424 SELECT md5(NULL::STRING, NULL::STRING) 425 ---- 426 NULL 427 428 query T 429 SELECT sha1(NULL::STRING) 430 ---- 431 NULL 432 433 query T 434 SELECT sha256(NULL::STRING) 435 ---- 436 NULL 437 438 query T 439 SELECT sha512(NULL::STRING, NULL::STRING) 440 ---- 441 NULL 442 443 query T 444 SELECT fnv32(NULL::STRING) 445 ---- 446 NULL 447 448 query T 449 SELECT to_hex(2147483647) 450 ---- 451 7fffffff 452 453 query I 454 SELECT strpos('high', 'a') 455 ---- 456 0 457 458 query I 459 SELECT strpos('high', 'ig') 460 ---- 461 2 462 463 query I 464 SELECT strpos('💩high', 'ig') 465 ---- 466 3 467 468 query III 469 SELECT strpos(B'00001111', B'1111'), strpos(B'', B''), strpos(B'0000111', B'1111') 470 ---- 471 5 1 0 472 473 query I 474 SELECT strpos('000001'::varbit, '1'::varbit) 475 ---- 476 6 477 478 query I 479 SELECT position(B'100' in B'100101') 480 ---- 481 1 482 483 query III 484 SELECT strpos(b'\x61\145aabc', b'abc'), strpos(b'', b''), strpos(b'ttt\x61\x61c', b'abc') 485 ---- 486 4 1 0 487 488 query I 489 SELECT position('\x616263'::bytea in 'abc'::bytea) 490 ---- 491 1 492 493 query I 494 SELECT position('ig' in 'high') 495 ---- 496 2 497 498 query I 499 SELECT position('a' in 'high') 500 ---- 501 0 502 503 query error unknown signature: strpos\(\) 504 SELECT position() 505 506 query T 507 SELECT overlay('123456789' placing 'xxxx' from 3) 508 ---- 509 12xxxx789 510 511 query T 512 SELECT overlay('123456789' placing 'xxxx' from 3 for 2) 513 ---- 514 12xxxx56789 515 516 query T 517 SELECT overlay('123456789' placing 'xxxx' from 3 for 6) 518 ---- 519 12xxxx9 520 521 query T 522 SELECT overlay('123456789' placing 'xxxx' from 15 for 6) 523 ---- 524 123456789xxxx 525 526 query T 527 SELECT overlay('123456789' placing 'xxxx' from 3 for 10) 528 ---- 529 12xxxx 530 531 query T 532 SELECT overlay('123456789' placing 'xxxx' from 3 for -1) 533 ---- 534 12xxxx23456789 535 536 query T 537 SELECT overlay('123456789' placing 'xxxx' from 3 for -8) 538 ---- 539 12xxxx123456789 540 541 query T 542 SELECT overlay('💩123456789' placing 'xxxxÂ' from 3 for 3) 543 ---- 544 💩1xxxxÂ56789 545 546 query error non-positive substring length not allowed: -1 547 SELECT overlay('123456789' placing 'xxxx' from -1 for 6) 548 549 query T 550 SELECT btrim('xyxtrimyyx', 'xy') 551 ---- 552 trim 553 554 query T 555 SELECT trim('xy' from 'xyxtrimyyx') 556 ---- 557 trim 558 559 query T 560 SELECT trim(both 'xy' from 'xyxtrimyyx') 561 ---- 562 trim 563 564 query T 565 SELECT 'a' || btrim(' postgres ') || 'b' 566 ---- 567 apostgresb 568 569 query T 570 SELECT ltrim('zzzytrimxyz', 'xyz') 571 ---- 572 trimxyz 573 574 query T 575 SELECT trim(leading 'xyz' from 'zzzytrimxyz') 576 ---- 577 trimxyz 578 579 query T 580 SELECT ltrim(' trimxyz') 581 ---- 582 trimxyz 583 584 query T 585 SELECT trim(leading ' trimxyz') 586 ---- 587 trimxyz 588 589 query T 590 SELECT trim(leading from ' trimxyz') 591 ---- 592 trimxyz 593 594 595 query T 596 SELECT rtrim('xyzzzzytrimxyz', 'xyz') 597 ---- 598 xyzzzzytrim 599 600 query T 601 SELECT trim(trailing 'xyz' from 'xyzzzzytrimxyz') 602 ---- 603 xyzzzzytrim 604 605 query T 606 SELECT 'a' || rtrim(' zzzytrimxyz ') 607 ---- 608 a zzzytrimxyz 609 610 query T 611 SELECT reverse('abcde') 612 ---- 613 edcba 614 615 query T 616 SELECT reverse('世界') 617 ---- 618 界世 619 620 query T 621 SELECT replace('abcdefabcdef', 'cd', 'XX') 622 ---- 623 abXXefabXXef 624 625 query T 626 SELECT replace(initcap('hi THOMAS'), ' ', '') 627 ---- 628 HiThomas 629 630 query T 631 SELECT initcap('THOMAS') 632 ---- 633 Thomas 634 635 query T 636 SELECT left('💩abcde'::bytes, 2) 637 ---- 638 [240 159] 639 640 query T 641 SELECT right('abcde💩'::bytes, 2) 642 ---- 643 [146 169] 644 645 query T 646 SELECT left('💩abcde', 2) 647 ---- 648 💩a 649 650 query T 651 SELECT right('abcde💩', 2) 652 ---- 653 e💩 654 655 query RRRIIR 656 SELECT abs(-1.2::float), abs(1.2::float), abs(-0.0::float), abs(0), abs(1), abs(-1.2121::decimal) 657 ---- 658 1.2 1.2 0 0 1 1.2121 659 660 query R 661 SELECT abs(NULL) 662 ---- 663 NULL 664 665 query error abs\(\): abs of min integer value \(-9223372036854775808\) not defined 666 SELECT abs(-9223372036854775808) 667 668 query I 669 SELECT abs(-9223372036854775807) 670 ---- 671 9223372036854775807 672 673 query B 674 SELECT abs(sin(pi())) < 1e-12 675 ---- 676 true 677 678 subtest standard_float_digits 679 680 query RR 681 SELECT acos(-0.5), round(acos(0.5), 15) 682 ---- 683 2.0943951023932 1.0471975511966 684 685 query RR 686 SELECT cot(-0.5), cot(0.5) 687 ---- 688 -1.83048772171245 1.83048772171245 689 690 query RRR 691 SELECT asin(-0.5), asin(0.5), asin(1.5) 692 ---- 693 -0.523598775598299 0.523598775598299 NaN 694 695 query RR 696 SELECT atan(-0.5), atan(0.5) 697 ---- 698 -0.463647609000806 0.463647609000806 699 700 query RR 701 SELECT atan2(-10.0, 5.0), atan2(10.0, 5.0) 702 ---- 703 -1.10714871779409 1.10714871779409 704 705 query RRR 706 SELECT cbrt(-1.0::float), round(cbrt(27.0::float), 15), cbrt(19.3::decimal) 707 ---- 708 -1 3 2.6823725926296729544 709 710 711 query RRRRR 712 SELECT ceil(-0.5::float), ceil(0.5::float), ceiling(0.5::float), ceil(0.1::decimal), ceiling (-0.9::decimal) 713 ---- 714 -0 1 1 1 0 715 716 query RR 717 SELECT cos(-0.5), cos(0.5) 718 ---- 719 0.877582561890373 0.877582561890373 720 721 query RRR 722 SELECT sin(-1.0), sin(0.0), sin(1.0) 723 ---- 724 -0.841470984807897 0 0.841470984807897 725 726 query RR 727 SELECT degrees(-0.5), degrees(0.5) 728 ---- 729 -28.6478897565412 28.6478897565412 730 731 subtest extra_float_digits_3 732 733 statement ok 734 SET extra_float_digits = 3 735 736 query RR 737 SELECT acos(-0.5), round(acos(0.5), 15) 738 ---- 739 2.0943951023931957 1.047197551196598 740 741 query RR 742 SELECT cot(-0.5), cot(0.5) 743 ---- 744 -1.830487721712452 1.830487721712452 745 746 query RRR 747 SELECT asin(-0.5), asin(0.5), asin(1.5) 748 ---- 749 -0.5235987755982989 0.5235987755982989 NaN 750 751 query RR 752 SELECT atan(-0.5), atan(0.5) 753 ---- 754 -0.4636476090008061 0.4636476090008061 755 756 query RR 757 SELECT atan2(-10.0, 5.0), atan2(10.0, 5.0) 758 ---- 759 -1.1071487177940904 1.1071487177940904 760 761 query RRR 762 SELECT cbrt(-1.0::float), round(cbrt(27.0::float), 15), cbrt(19.3::decimal) 763 ---- 764 -1 3 2.6823725926296729544 765 766 query RRRRR 767 SELECT ceil(-0.5::float), ceil(0.5::float), ceiling(0.5::float), ceil(0.1::decimal), ceiling(-0.9::decimal) 768 ---- 769 -0 1 1 1 0 770 771 query RR 772 SELECT cos(-0.5), cos(0.5) 773 ---- 774 0.8775825618903728 0.8775825618903728 775 776 query RRR 777 SELECT sin(-1.0), sin(0.0), sin(1.0) 778 ---- 779 -0.8414709848078965 0 0.8414709848078965 780 781 query RR 782 SELECT degrees(-0.5), degrees(0.5) 783 ---- 784 -28.64788975654116 28.64788975654116 785 786 statement ok 787 SET extra_float_digits = 0 788 789 subtest other_tests 790 791 query IIII 792 SELECT div(-1::int, 2::int), div(1::int, 2::int), div(9::int, 4::int), div(-9::int, 4::int) 793 ---- 794 0 0 2 -2 795 796 query RRRRRR 797 SELECT div(-1.0::float, 2.0), div(1.0::float, 2.0), div(9.0::float, 4.0), div(-9.0::float, 4.0), div(1.0::float, 0.0), div(1111.0::decimal, 9.44) 798 ---- 799 -0 0 2 -2 +Inf 117 800 801 query error div\(\): division by zero 802 SELECT div(1.0::decimal, 0.0::decimal) 803 804 query error div\(\): division by zero 805 SELECT div(1::int, 0::int) 806 807 # math.Exp(1.0) returns different results on amd64 vs arm64. 808 # Round to make this test consistent across archs. 809 # See https://github.com/golang/go/issues/20319. 810 query RRR 811 SELECT exp(-1.0::float), round(exp(1.0::float), 13), exp(2.0::decimal) 812 ---- 813 0.367879441171442 2.718281828459 7.3890560989306502272 814 815 query error exp\(\): overflow 816 SELECT exp(1e2000::decimal) 817 818 query RRR 819 SELECT floor(-1.5::float), floor(1.5::float), floor(9.123456789::decimal) 820 ---- 821 -2 1 9 822 823 query BBBBBB 824 SELECT 1::FLOAT IS NAN, 1::FLOAT IS NOT NAN, isnan(1::FLOAT), 'NaN'::FLOAT IS NAN, 'NaN'::FLOAT IS NOT NAN, isnan('NaN'::FLOAT) 825 ---- 826 false true false true false true 827 828 query RRR 829 SELECT ln(-2.0::float), ln(2.0::float), ln(2.5::decimal) 830 ---- 831 NaN 0.693147180559945 0.91629073187415506518 832 833 query error cannot take logarithm of a negative number 834 SELECT ln(-100.000::decimal) 835 836 query error cannot take logarithm of zero 837 SELECT ln(0::decimal) 838 839 query RR 840 SELECT log(10.0::float), log(100.000::decimal) 841 ---- 842 1 2.0000000000000000000 843 844 query R 845 SELECT log(2.0::float, 4.0::float) 846 ---- 847 2 848 849 query R 850 SELECT log(2.0::decimal, 4.0::decimal) 851 ---- 852 2.0000000000000000000 853 854 query error cannot take logarithm of a negative number 855 SELECT log(2.0::float, -10.0::float) 856 857 query error cannot take logarithm of zero 858 SELECT log(2.0::float, 0.0::float) 859 860 query error cannot take logarithm of a negative number 861 SELECT log(2.0::decimal, -10.0::decimal) 862 863 query error cannot take logarithm of zero 864 SELECT log(2.0::decimal, 0.0::decimal) 865 866 query error cannot take logarithm of a negative number 867 SELECT log(-100.000::decimal) 868 869 query error cannot take logarithm of zero 870 SELECT log(0::decimal) 871 872 query RRIR 873 SELECT mod(5.0::float, 2.0), mod(1.0::float, 0.0), mod(5, 2), mod(19.3::decimal, 2) 874 ---- 875 1 NaN 1 1.3 876 877 # mod returns the same results as PostgreSQL 9.4.4 878 # in tests below (except for the error message). 879 880 query error mod\(\): zero modulus 881 SELECT mod(5, 0) 882 883 query error mod\(\): zero modulus 884 SELECT mod(5::decimal, 0::decimal) 885 886 query II 887 SELECT mod(-100, -8), mod(-100, 8) 888 ---- 889 -4 -4 890 891 query I 892 SELECT mod(-9223372036854775808, 3) 893 ---- 894 -2 895 896 query I 897 SELECT mod(-9223372036854775808, -1) 898 ---- 899 0 900 901 query I 902 SELECT mod(9223372036854775807, -1) 903 ---- 904 0 905 906 query I 907 SELECT mod(9223372036854775807, -2) 908 ---- 909 1 910 911 query I 912 SELECT mod(9223372036854775807, 1) 913 ---- 914 0 915 916 query I 917 SELECT mod(9223372036854775807, 2) 918 ---- 919 1 920 921 query I 922 SELECT mod(9223372036854775807, 4) 923 ---- 924 3 925 926 # div and mod are a logical pair 927 928 query R 929 SELECT div(9.0::float, 2.0) * 2.0 + mod(9.0::float, 2.0) 930 ---- 931 9 932 933 query R 934 SELECT div(9.0::float, -2.0) * -2.0 + mod(9.0::float, -2.0) 935 ---- 936 9 937 938 query R 939 SELECT div(-9.0::float, 2.0) * 2.0 + mod(-9.0::float, 2.0) 940 ---- 941 -9 942 943 query R 944 SELECT div(-9.0::float, -2.0) * -2.0 + mod(-9.0::float, -2.0) 945 ---- 946 -9 947 948 query R 949 SELECT pi() 950 ---- 951 3.14159265358979 952 953 query II 954 SELECT pow(-2::int, 3::int), pow(2::int, 3::int) 955 ---- 956 -8 8 957 958 statement error integer out of range 959 SELECT pow(2::int, -3::int) 960 961 query III 962 SELECT pow(0::int, 3::int), pow(3::int, 0::int), pow(-3::int, 0::int) 963 ---- 964 0 1 1 965 966 statement error integer out of range 967 SELECT pow(0::int, -3::int) 968 969 # TODO(mjibson): This uses the decimal implementation internally, which 970 # returns NaN, hence the below error. However postgres returns 1 for this, 971 # which we should probably match. 972 statement error integer out of range 973 SELECT pow(0::int, 0::int) 974 975 query RRR 976 SELECT pow(-3.0::float, 2.0), power(3.0::float, 2.0), pow(5.0::decimal, 2.0) 977 ---- 978 9 9 25.00 979 980 query R 981 SELECT pow(CAST (pi() AS DECIMAL), DECIMAL '2.0') 982 ---- 983 9.8696044010893571205 984 985 query R 986 SELECT power(0::decimal, -1) 987 ---- 988 Infinity 989 990 # TODO(mjibson): Postgres returns an error for this. 991 query R 992 SELECT power(-1, -.1) 993 ---- 994 NaN 995 996 query RR 997 SELECT radians(-45.0), radians(45.0) 998 ---- 999 -0.785398163397448 0.785398163397448 1000 1001 query R 1002 SELECT round(123.456::float, -2438602134409251682) 1003 ---- 1004 NaN 1005 1006 query RRR 1007 SELECT round(4.2::float, 0), round(4.2::float, 10), round(4.22222222::decimal, 3) 1008 ---- 1009 4 4.2 4.222 1010 1011 query R 1012 SELECT round(1e-308::float, 324) 1013 ---- 1014 1e-308 1015 1016 # round to nearest even 1017 query RRRR 1018 SELECT round(-2.5::float, 0), round(-1.5::float, 0), round(1.5::float, 0), round(2.5::float, 0) 1019 ---- 1020 -2 -2 2 2 1021 1022 query RRRRRR 1023 SELECT round(-2.5::float), round(-1.5::float), round(-0.0::float), round(0.0::float), round(1.5::float), round(2.5::float) 1024 ---- 1025 -2 -2 -0 0 2 2 1026 1027 # some edge cases: denormal, 0.5-epsilon, 0.5+epsilon, 1 bit fractions, 1 bit fraction rounding to 0 bit fraction, large integer 1028 query RRRRRRR 1029 SELECT round(1.390671161567e-309::float), round(0.49999999999999994::float), round(0.5000000000000001::float), round(2251799813685249.5::float), round(2251799813685250.5::float), round(4503599627370495.5::float), round(4503599627370497::float) 1030 ---- 1031 0 0 1 2.25179981368525e+15 2.25179981368525e+15 4.5035996273705e+15 4.5035996273705e+15 1032 1033 # round up for decimals 1034 # These results are indeed different than floats. Compare with postgres. 1035 # Float rounding uses banker, decimal rounding uses half away from zero. 1036 query RRRR 1037 SELECT round(-2.5::decimal, 0), round(-1.5::decimal, 0), round(1.5::decimal, 0), round(2.5::decimal, 0) 1038 ---- 1039 -3 -2 2 3 1040 1041 query RRRRR 1042 SELECT round(-2.5::decimal, 3), round(-1.5::decimal, 3), round(0.0::decimal, 3), round(1.5::decimal, 3), round(2.5::decimal, 3) 1043 ---- 1044 -2.500 -1.500 0.000 1.500 2.500 1045 1046 query RRRRR 1047 SELECT round(-2.5::decimal), round(-1.5::decimal), round(0.0::decimal), round(1.5::decimal), round(2.5::decimal) 1048 ---- 1049 -3 -2 0 2 3 1050 1051 subtest round_max_prec 1052 1053 # Test rounding to 14 digits, because the logic test itself 1054 # formats floats rounded to 15 digits behind the decimal point. 1055 1056 statement ok 1057 SET extra_float_digits = 3 1058 1059 query RRR 1060 SELECT round(-2.123456789, 5), round(2.123456789, 5), round(2.12345678901234567890, 14) 1061 ---- 1062 -2.12346 2.12346 2.12345678901235 1063 1064 query RR 1065 SELECT round(-1.7976931348623157e+308::float, 1), round(1.7976931348623157e+308::float, 1) 1066 ---- 1067 -1.7976931348623157e+308 1.7976931348623157e+308 1068 1069 query RR 1070 SELECT round(-1.7976931348623157e+308::float, -303), round(1.7976931348623157e+308::float, -303) 1071 ---- 1072 -1.79769e+308 1.79769e+308 1073 1074 query RR 1075 SELECT round(-1.23456789e+308::float, -308), round(1.23456789e+308::float, -308) 1076 ---- 1077 -1e+308 1e+308 1078 1079 query RRRR 1080 SELECT 1.234567890123456789::float, round(1.234567890123456789::float, 15), round(1.234567890123456789::float, 16), round(1.234567890123456789::float, 17) 1081 ---- 1082 1.2345678901234567 1.234567890123457 1.2345678901234567 1.2345678901234567 1083 1084 statement ok 1085 SET extra_float_digits = 0 1086 1087 subtest round_low_prec 1088 1089 statement ok 1090 SET extra_float_digits = -6 1091 1092 query RRR 1093 SELECT round(-2.123456789, 5), round(2.123456789, 5), round(2.12345678901234567890, 14) 1094 ---- 1095 -2.12346 2.12346 2.12345678901235 1096 1097 query RR 1098 SELECT round(-1.7976931348623157e+308::float, 1), round(1.7976931348623157e+308::float, 1) 1099 ---- 1100 -1.79769313e+308 1.79769313e+308 1101 1102 query RR 1103 SELECT round(-1.7976931348623157e+308::float, -303), round(1.7976931348623157e+308::float, -303) 1104 ---- 1105 -1.79769e+308 1.79769e+308 1106 1107 query RR 1108 SELECT round(-1.23456789e+308::float, -308), round(1.23456789e+308::float, -308) 1109 ---- 1110 -1e+308 1e+308 1111 1112 query RRRR 1113 SELECT 1.234567890123456789::float, round(1.234567890123456789::float, 15), round(1.234567890123456789::float, 16), round(1.234567890123456789::float, 17) 1114 ---- 1115 1.23456789 1.23456789 1.23456789 1.23456789 1116 1117 statement ok 1118 SET extra_float_digits = 0 1119 1120 subtest more_round_tests 1121 1122 query RR 1123 SELECT round(-1.7976931348623157e-308::float, 1), round(1.7976931348623157e-308::float, 1) 1124 ---- 1125 -0 0 1126 1127 1128 query RRR 1129 SELECT round(123.456::float, -1), round(123.456::float, -2), round(123.456::float, -3) 1130 ---- 1131 120 100 0 1132 1133 query RRRR 1134 SELECT round(123.456::decimal, -1), round(123.456::decimal, -2), round(123.456::decimal, -3), round(123.456::decimal, -200) 1135 ---- 1136 1.2E+2 1E+2 0E+3 0E+200 1137 1138 query RRRR 1139 SELECT round('nan'::decimal), round('nan'::decimal, 1), round('nan'::float), round('nan'::float, 1) 1140 ---- 1141 NaN NaN NaN NaN 1142 1143 # Match postgres float round for inf. 1144 query RRRR 1145 SELECT round('inf'::float), round('inf'::float, 1), round('-inf'::float), round('-inf'::float, 1) 1146 ---- 1147 +Inf +Inf -Inf -Inf 1148 1149 # But decimal round (which isn't supported at all in postgres because 1150 # postgres doesn't support NaN or Inf for its decimals) conforms to 1151 # the GDA spec. 1152 query R 1153 SELECT round('inf'::decimal) 1154 ---- 1155 NaN 1156 1157 query R 1158 SELECT round(1::decimal, 3000) 1159 ---- 1160 NaN 1161 1162 subtest more_tests 1163 1164 query III 1165 SELECT sign(-2), sign(0), sign(2) 1166 ---- 1167 -1 0 1 1168 1169 query RRRR 1170 SELECT sign(-2.0), sign(-0.0), sign(0.0), sign(2.0) 1171 ---- 1172 -1 0 0 1 1173 1174 query RR 1175 SELECT sqrt(4.0::float), sqrt(9.0::decimal) 1176 ---- 1177 2 3 1178 1179 query error cannot take square root of a negative number 1180 SELECT sqrt(-1.0::float) 1181 1182 query error cannot take square root of a negative number 1183 SELECT sqrt(-1.0::decimal) 1184 1185 query RRR 1186 SELECT round(tan(-5.0), 14), tan(0.0), round(tan(5.0), 14) 1187 ---- 1188 3.38051500624659 0 -3.38051500624659 1189 1190 query RRRR 1191 SELECT trunc(-0.0), trunc(0.0), trunc(1.9), trunc(19.5678::decimal) 1192 ---- 1193 0 0 1 19 1194 1195 query T 1196 SELECT translate('Techonthenet.com', 'e.to', '456') 1197 ---- 1198 T4chn6h4n465cm 1199 1200 query T 1201 SELECT translate('12345', '143', 'ax') 1202 ---- 1203 a2x5 1204 1205 query T 1206 SELECT translate('12345', 'abc', 'ax') 1207 ---- 1208 12345 1209 1210 query T 1211 SELECT translate('a‰ÒÁ', 'aÒ', '∏p') 1212 ---- 1213 ∏‰pÁ 1214 1215 query T 1216 SELECT regexp_extract('foobar', 'o.b') 1217 ---- 1218 oob 1219 1220 query T 1221 SELECT regexp_extract('foobar', 'o(.)b') 1222 ---- 1223 o 1224 1225 query T 1226 SELECT regexp_extract('foobar', '(o(.)b)') 1227 ---- 1228 oob 1229 1230 query T 1231 SELECT regexp_extract('foabaroob', 'o(.)b') 1232 ---- 1233 a 1234 1235 query T 1236 SELECT regexp_extract('foobar', 'o.x') 1237 ---- 1238 NULL 1239 1240 query T 1241 SELECT regexp_replace('foobarbaz', 'b..', 'X') 1242 ---- 1243 fooXbaz 1244 1245 query T 1246 SELECT regexp_replace('foobarbaz', 'b..', 'X', 'g') 1247 ---- 1248 fooXX 1249 1250 query T 1251 SELECT regexp_replace('foobarbaz', 'b(..)', E'X\\1Y', 'g') 1252 ---- 1253 fooXarYXazY 1254 1255 query T 1256 SELECT regexp_replace('foobarbaz', 'b(.)(.)', E'X\\2\\1\\3Y', 'g') 1257 ---- 1258 fooXraYXzaY 1259 1260 query T 1261 SELECT regexp_replace(E'fooBa\nrbaz', 'b(..)', E'X\\&Y', 'gi') 1262 ---- 1263 fooXBa 1264 YrXbazY 1265 1266 query T 1267 SELECT regexp_replace(E'fooBa\nrbaz', 'b(..)', E'X\\&Y', 'gmi') 1268 ---- 1269 fooBa 1270 rXbazY 1271 1272 query T 1273 SELECT regexp_replace(E'fooBar\nbaz', 'b(..)$', E'X\\&Y', 'gpi') 1274 ---- 1275 fooBar 1276 XbazY 1277 1278 query T 1279 SELECT regexp_replace(E'fooBar\nbaz', 'b(..)$', E'X\\&Y', 'gwi') 1280 ---- 1281 fooXBarY 1282 XbazY 1283 1284 query T 1285 SELECT regexp_replace('foobarbaz', 'nope', 'NO') 1286 ---- 1287 foobarbaz 1288 1289 query error regexp_replace\(\): invalid regexp flag: 'z' 1290 SELECT regexp_replace(E'fooBar\nbaz', 'b(..)$', E'X\\&Y', 'z') 1291 1292 query T 1293 SELECT regexp_replace(E'Foo\nFoo', '^(foo)', 'BAR', 'i') 1294 ---- 1295 BAR 1296 Foo 1297 1298 query T 1299 SELECT regexp_replace(e'DOGGIE\ndog \nDOG', '^d.+', 'CAT', 's') 1300 ---- 1301 DOGGIE 1302 dog 1303 DOG 1304 1305 query T 1306 SELECT regexp_replace(e'DOGGIE\ndog \nDOG', '^d.+', 'CAT', 'n'); 1307 ---- 1308 DOGGIE 1309 CAT 1310 DOG 1311 1312 query T 1313 SELECT regexp_replace(e'DOGGIE\ndog \nDOG', '^D.+', 'CAT', 'p') 1314 ---- 1315 CAT 1316 dog 1317 DOG 1318 1319 query T 1320 SELECT regexp_replace(e'DOGGIE\ndog \nDOG', '^d.+', 'CAT', 'w') 1321 ---- 1322 DOGGIE 1323 CAT 1324 1325 query T 1326 SELECT regexp_replace('abc', 'b', e'\n', 'w') 1327 ---- 1328 a 1329 c 1330 1331 query T 1332 SELECT regexp_replace('abc\', 'b', 'a', 'w') 1333 ---- 1334 aac\ 1335 1336 query T 1337 SELECT regexp_replace('abc', 'c', 'a\', 'w') 1338 ---- 1339 aba\ 1340 1341 # #19046 1342 query T 1343 SELECT regexp_replace('ReRe','R(e)','1\\1','g'); 1344 ---- 1345 1\11\1 1346 1347 query B 1348 SELECT unique_rowid() < unique_rowid() 1349 ---- 1350 true 1351 1352 query BI 1353 SELECT uuid_v4() != uuid_v4(), length(uuid_v4()) 1354 ---- 1355 true 16 1356 1357 query error at or near.*: syntax error 1358 SELECT greatest() 1359 1360 query error at or near.*: syntax error 1361 SELECT least() 1362 1363 query I 1364 SELECT greatest(4, 5, 7, 1, 2) 1365 ---- 1366 7 1367 1368 query I 1369 SELECT least(4, 5, 7, 1, 2) 1370 ---- 1371 1 1372 1373 query I 1374 SELECT greatest(4, NULL, 7, 1, 2) 1375 ---- 1376 7 1377 1378 query I 1379 SELECT greatest(NULL, NULL, 7, NULL, 2) 1380 ---- 1381 7 1382 1383 query I 1384 SELECT greatest(NULL, NULL, NULL, NULL, 2) 1385 ---- 1386 2 1387 1388 query I 1389 SELECT greatest(2, NULL, NULL, NULL, NULL) 1390 ---- 1391 2 1392 1393 query I 1394 SELECT least(4, NULL, 7, 1, 2) 1395 ---- 1396 1 1397 1398 query I 1399 SELECT greatest(NULL, NULL, NULL) 1400 ---- 1401 NULL 1402 1403 query I 1404 SELECT least(NULL, NULL, NULL) 1405 ---- 1406 NULL 1407 1408 query I 1409 SELECT greatest(2, '4') 1410 ---- 1411 4 1412 1413 query I 1414 SELECT least(2, '4') 1415 ---- 1416 2 1417 1418 query T 1419 SELECT greatest('foo', 'bar', 'foobar') 1420 ---- 1421 foobar 1422 1423 query T 1424 SELECT least('foo', 'bar', 'foobar') 1425 ---- 1426 bar 1427 1428 query R 1429 SELECT greatest(1, 1.2) 1430 ---- 1431 1.2 1432 1433 # Test homogenous functions that can't be constant folded. 1434 query I 1435 SELECT greatest(NULL, a, 5, NULL) FROM foo 1436 ---- 1437 5 1438 1439 query I 1440 SELECT greatest(NULL, NULL, NULL, a, -1) FROM foo 1441 ---- 1442 1 1443 1444 query I 1445 SELECT least(NULL, a, 5, NULL) FROM foo 1446 ---- 1447 1 1448 1449 query I 1450 SELECT least(NULL, NULL, NULL, a, -1) FROM foo 1451 ---- 1452 -1 1453 1454 # Test float and int comparison. 1455 1456 query BBBB 1457 select 1 = 1.0::float, 1.0::float = 1, 1 = 2.0::float, 2.0::float = 1 1458 ---- 1459 true true false false 1460 1461 query BBBB 1462 select 1 < 2.0::float, 1.0::float < 2, 2.0::float < 1, 2 < 1.0::float 1463 ---- 1464 true true false false 1465 1466 query BBBB 1467 select 1 <= 1.0::float, 1.0::float <= 1, 2.0::float <= 1, 2 <= 1.0::float 1468 ---- 1469 true true false false 1470 1471 query BBBB 1472 select 2 > 1.0::float, 2.0::float > 1, 1 > 2.0::float, 1.0::float > 2 1473 ---- 1474 true true false false 1475 1476 query BBBB 1477 select 1 >= 1.0::float, 1.0::float >= 1, 1.0::float >= 2, 1 >= 2.0::float 1478 ---- 1479 true true false false 1480 1481 # Test decimal and int comparison. 1482 1483 query BBBB 1484 select 1 = 1.0::decimal, 1.0::decimal = 1, 1 = 2.0::decimal, 2.0::decimal = 1 1485 ---- 1486 true true false false 1487 1488 query BBBB 1489 select 1 < 2.0::decimal, 1.0::decimal < 2, 2.0::decimal < 1, 2 < 1.0::decimal 1490 ---- 1491 true true false false 1492 1493 query BBBB 1494 select 1 <= 1.0::decimal, 1.0::decimal <= 1, 2.0::decimal <= 1, 2 <= 1.0::decimal 1495 ---- 1496 true true false false 1497 1498 query BBBB 1499 select 2 > 1.0::decimal, 2.0::decimal > 1, 1 > 2.0::decimal, 1.0::decimal > 2 1500 ---- 1501 true true false false 1502 1503 query BBBB 1504 select 1 >= 1.0::decimal, 1.0::decimal >= 1, 1.0::decimal >= 2, 1 >= 2.0::decimal 1505 ---- 1506 true true false false 1507 1508 # Test float and decimal comparison. 1509 1510 query BBBB 1511 select 1::decimal = 1.0, 1.0 = 1::decimal, 1::decimal = 2.0, 2.0 = 1::decimal 1512 ---- 1513 true true false false 1514 1515 query BBBB 1516 select 1::decimal < 2.0, 1.0 < 2::decimal, 2.0 < 1::decimal, 2::decimal < 1.0 1517 ---- 1518 true true false false 1519 1520 query BBBB 1521 select 1::decimal <= 1.0, 1.0 <= 1::decimal, 2.0 <= 1::decimal, 2::decimal <= 1.0 1522 ---- 1523 true true false false 1524 1525 query BBBB 1526 select 2::decimal > 1.0, 2.0 > 1::decimal, 1::decimal > 2.0, 1.0 > 2::decimal 1527 ---- 1528 true true false false 1529 1530 query BBBB 1531 select 1::decimal >= 1.0, 1.0 >= 1::decimal, 1.0 >= 2::decimal, 1::decimal >= 2.0 1532 ---- 1533 true true false false 1534 1535 query I 1536 SELECT strpos(version(), 'CockroachDB') 1537 ---- 1538 1 1539 1540 # Don't panic during incorrect use of * (#7727) 1541 query error pq: cos\(\): cannot use "\*" in this context 1542 SELECT cos(*) FROM system.namespace 1543 1544 # Don't panic with invalid names (#8045) 1545 query error no data source matches pattern: nonexistent.\* 1546 SELECT TRIM(TRAILING nonexistent.*[1]) 1547 1548 query error rtrim\(\): cannot subscript type tuple 1549 SELECT TRIM(TRAILING foo.*[1]) FROM (VALUES (1)) AS foo(x) 1550 1551 # Don't panic with invalid names (#8044) 1552 query error no data source matches pattern: nonexistent.\* 1553 SELECT OVERLAY(nonexistent.* PLACING 'string' FROM 'string') 1554 1555 query error unknown signature 1556 SELECT OVERLAY(foo.* PLACING 'string' FROM 'string') FROM (VALUES (1)) AS foo(x) 1557 1558 # Don't panic with invalid names (#8023) 1559 query error no data source matches pattern: nonexistent.\* 1560 SELECT nonexistent.* IS NOT TRUE 1561 1562 query error unsupported comparison operator: <tuple{int AS x}> IS DISTINCT FROM <bool> 1563 SELECT foo.* IS NOT TRUE FROM (VALUES (1)) AS foo(x) 1564 1565 query T 1566 SELECT current_schemas(true) 1567 ---- 1568 {pg_catalog,pg_extension,public} 1569 1570 query T 1571 SELECT current_schemas(false) 1572 ---- 1573 {public} 1574 1575 # Force the function to be evaluated at execution time and verify it doesn't 1576 # break when distsql is on. 1577 query T 1578 SELECT current_schemas(x) FROM (VALUES (true), (false)) AS t(x); 1579 ---- 1580 {pg_catalog,pg_extension,public} 1581 {public} 1582 1583 statement ok 1584 SET search_path=test,pg_catalog 1585 1586 query T 1587 SELECT current_schemas(true) 1588 ---- 1589 {pg_catalog} 1590 1591 query T 1592 SELECT current_schemas(false) 1593 ---- 1594 {pg_catalog} 1595 1596 statement ok 1597 RESET search_path 1598 1599 query error pq: unknown signature: current_schemas() 1600 SELECT current_schemas() 1601 1602 query T 1603 SELECT current_schemas(NULL::bool) 1604 ---- 1605 NULL 1606 1607 query B 1608 SELECT 'public' = ANY (current_schemas(true)) 1609 ---- 1610 true 1611 1612 query B 1613 SELECT 'not test' = ANY (current_schemas(true)) 1614 ---- 1615 false 1616 1617 query B 1618 SELECT pg_catalog.pg_table_is_visible('foo'::regclass) 1619 ---- 1620 true 1621 1622 statement ok 1623 SET search_path = pg_catalog 1624 1625 query B 1626 SELECT pg_catalog.pg_table_is_visible((SELECT oid FROM pg_class WHERE relname='foo')) 1627 ---- 1628 false 1629 1630 statement ok 1631 SET SEARCH_PATH = public, pg_catalog 1632 1633 query B 1634 SELECT pg_catalog.pg_table_is_visible((SELECT oid FROM pg_class WHERE relname='foo')) 1635 ---- 1636 true 1637 1638 statement ok 1639 RESET search_path 1640 1641 query T 1642 SELECT current_schema() 1643 ---- 1644 public 1645 1646 query B 1647 SELECT pg_catalog.pg_function_is_visible((select 'pg_table_is_visible'::regproc)) 1648 ---- 1649 true 1650 1651 query B 1652 SELECT pg_catalog.pg_function_is_visible(0) 1653 ---- 1654 NULL 1655 1656 # COLLATION FOR returns a locale name for a collated string 1657 # but for a not collated string 'default' locale name is a Postgres compatible behavior: 1658 # https://www.postgresql.org/docs/10/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE 1659 query T 1660 SELECT COLLATION FOR ('foo') 1661 ---- 1662 "default" 1663 1664 query T 1665 SELECT COLLATION FOR ('foo' COLLATE "de_DE"); 1666 ---- 1667 "de_DE" 1668 1669 statement error pq: pg_collation_for\(\): collations are not supported by type: int 1670 SELECT COLLATION FOR (1); 1671 1672 query T 1673 SELECT pg_collation_for ('foo') 1674 ---- 1675 "default" 1676 1677 query T 1678 SELECT pg_collation_for ('foo' COLLATE "de_DE"); 1679 ---- 1680 "de_DE" 1681 1682 statement error pq: pg_collation_for\(\): collations are not supported by type: int 1683 SELECT pg_collation_for(1); 1684 1685 query I 1686 SELECT array_length(ARRAY['a', 'b'], 1) 1687 ---- 1688 2 1689 1690 query I 1691 SELECT array_length(ARRAY['a'], 1) 1692 ---- 1693 1 1694 1695 query I 1696 SELECT array_length(ARRAY['a'], 0) 1697 ---- 1698 NULL 1699 1700 query I 1701 SELECT array_length(ARRAY['a'], 2) 1702 ---- 1703 NULL 1704 1705 query I 1706 SELECT array_lower(ARRAY['a', 'b'], 1) 1707 ---- 1708 1 1709 1710 query I 1711 SELECT array_lower(ARRAY['a'], 1) 1712 ---- 1713 1 1714 1715 query I 1716 SELECT array_lower(ARRAY['a'], 0) 1717 ---- 1718 NULL 1719 1720 query I 1721 SELECT array_lower(ARRAY['a'], 2) 1722 ---- 1723 NULL 1724 1725 query I 1726 SELECT array_upper(ARRAY['a', 'b'], 1) 1727 ---- 1728 2 1729 1730 query I 1731 SELECT array_upper(ARRAY['a'], 1) 1732 ---- 1733 1 1734 1735 query I 1736 SELECT array_upper(ARRAY['a'], 0) 1737 ---- 1738 NULL 1739 1740 query I 1741 SELECT array_upper(ARRAY['a'], 2) 1742 ---- 1743 NULL 1744 1745 query I 1746 SELECT array_length(ARRAY[]:::int[], 1) 1747 ---- 1748 NULL 1749 1750 query I 1751 SELECT array_lower(ARRAY[]:::int[], 1) 1752 ---- 1753 NULL 1754 1755 query I 1756 SELECT array_upper(ARRAY[]:::int[], 1) 1757 ---- 1758 NULL 1759 1760 query I 1761 SELECT array_length(ARRAY[ARRAY[1, 2]], 2) 1762 ---- 1763 2 1764 1765 query I 1766 SELECT array_lower(ARRAY[ARRAY[1, 2]], 2) 1767 ---- 1768 1 1769 1770 query I 1771 SELECT array_upper(ARRAY[ARRAY[1, 2]], 2) 1772 ---- 1773 2 1774 1775 query T 1776 SELECT encode('\xa7', 'hex') 1777 ---- 1778 a7 1779 1780 query TT 1781 SELECT encode('abc', 'hex'), decode('616263', 'hex') 1782 ---- 1783 616263 abc 1784 1785 query T 1786 SELECT encode(e'123\000456', 'escape') 1787 ---- 1788 123\000456 1789 1790 query T 1791 SELECT decode('123\000456', 'escape')::STRING 1792 ---- 1793 \x31323300343536 1794 1795 query TT 1796 SELECT encode('abc', 'base64'), decode('YWJj', 'base64') 1797 ---- 1798 YWJj abc 1799 1800 query T 1801 SELECT decode('padded==', 'base64')::STRING 1802 ---- 1803 \xa5a75d79 1804 1805 query T 1806 SELECT decode('padded1=', 'base64')::STRING 1807 ---- 1808 \xa5a75d79dd 1809 1810 query error illegal base64 data at input byte 4 1811 SELECT decode('invalid', 'base64') 1812 1813 query error only 'hex', 'escape', and 'base64' formats are supported for encode\(\) 1814 SELECT encode('abc', 'fake') 1815 1816 query error only 'hex', 'escape', and 'base64' formats are supported for decode\(\) 1817 SELECT decode('abc', 'fake') 1818 1819 query T 1820 SELECT from_ip(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x01\x02\x03\x04') 1821 ---- 1822 1.2.3.4 1823 1824 query T 1825 SELECT from_ip(to_ip('1.2.3.4')) 1826 ---- 1827 1.2.3.4 1828 1829 # net.IP.String() always gives us the most succinct form of ipv6 1830 query T 1831 select from_ip(to_ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334')) 1832 ---- 1833 2001:db8:85a3::8a2e:370:7334 1834 1835 query error pq: unknown signature: to_ip() 1836 SELECT to_ip() 1837 1838 query error pq: from_ip\(\): zero length IP 1839 SELECT from_ip(b'') 1840 1841 query error pq: to_ip\(\): invalid IP format: '' 1842 SELECT to_ip('') 1843 1844 query error pq: to_ip\(\): invalid IP format: 'asdf' 1845 select to_ip('asdf') 1846 1847 query R 1848 select ln(4.0786335175292462e+34::decimal) 1849 ---- 1850 79.693655171940461633 1851 1852 query IB 1853 SELECT length(gen_random_uuid()::BYTES), gen_random_uuid() = gen_random_uuid() 1854 ---- 1855 16 false 1856 1857 query TTTTTT 1858 SELECT to_uuid('63616665-6630-3064-6465-616462656566'), 1859 to_uuid('{63616665-6630-3064-6465-616462656566}'), 1860 to_uuid('urn:uuid:63616665-6630-3064-6465-616462656566'), 1861 from_uuid(b'cafef00ddeadbeef'), 1862 to_uuid(from_uuid(b'cafef00ddeadbeef')), 1863 from_uuid(to_uuid('63616665-6630-3064-6465-616462656566')) 1864 ---- 1865 cafef00ddeadbeef 1866 cafef00ddeadbeef 1867 cafef00ddeadbeef 1868 63616665-6630-3064-6465-616462656566 1869 cafef00ddeadbeef 1870 63616665-6630-3064-6465-616462656566 1871 1872 query error uuid: incorrect UUID length 1873 SELECT to_uuid('63616665-6630-3064-6465') 1874 1875 query error uuid: incorrect UUID length 1876 SELECT to_uuid('63616665-6630-3064-6465-616462656566-123') 1877 1878 query error uuid: incorrect UUID format 1879 SELECT to_uuid('6361666512-6630-3064-6465-616462656566') 1880 1881 query error uuid: UUID must be exactly 16 bytes long, got 4 bytes 1882 SELECT from_uuid(b'f00d') 1883 1884 query T 1885 SELECT pg_catalog.pg_typeof(sign(1:::decimal)) 1886 ---- 1887 numeric 1888 1889 query T 1890 VALUES (pg_typeof(1:::int)), 1891 (pg_typeof('a':::string)), 1892 (pg_typeof(true)), 1893 (pg_typeof(NULL)), 1894 (pg_typeof('3m':::interval)), 1895 (pg_typeof('2016-11-12':::date)), 1896 (pg_typeof(now():::timestamptz)), 1897 (pg_typeof(b'a':::bytes)), 1898 (pg_typeof(array[1,2,3])) 1899 ---- 1900 bigint 1901 text 1902 boolean 1903 unknown 1904 interval 1905 date 1906 timestamp with time zone 1907 bytea 1908 bigint[] 1909 1910 query T 1911 VALUES (format_type('anyelement'::regtype, -1)), 1912 (format_type('bit'::regtype, -1)), 1913 (format_type('bool'::regtype, -1)), 1914 (format_type('bytea'::regtype, -1)), 1915 (format_type('char'::regtype, -1)), 1916 (format_type('date'::regtype, -1)), 1917 (format_type('decimal'::regtype, -1)), 1918 (format_type('float'::regtype, -1)), 1919 (format_type('float4'::regtype, -1)), 1920 (format_type('interval'::regtype, -1)), 1921 (format_type('numeric'::regtype, -1)), 1922 (format_type('oid'::regtype, -1)), 1923 (format_type('oidvector'::regtype, -1)), 1924 (format_type('inet'::regtype, -1)), 1925 (format_type('int'::regtype, -1)), 1926 (format_type('int4'::regtype, -1)), 1927 (format_type('int2'::regtype, -1)), 1928 (format_type('int2vector'::regtype, -1)), 1929 (format_type('interval'::regtype, -1)), 1930 (format_type('json'::regtype, -1)), 1931 (format_type('name'::regtype, -1)), 1932 (format_type('regclass'::regtype, -1)), 1933 (format_type('regnamespace'::regtype, -1)), 1934 (format_type('regproc'::regtype, -1)), 1935 (format_type('regprocedure'::regtype, -1)), 1936 (format_type('regtype'::regtype, -1)), 1937 (format_type('string'::regtype, -1)), 1938 (format_type('time'::regtype, -1)), 1939 (format_type('timestamp'::regtype, -1)), 1940 (format_type('timestamptz'::regtype, -1)), 1941 (format_type('record'::regtype, -1)), 1942 (format_type('uuid'::regtype, -1)), 1943 (format_type('unknown'::regtype, -1)), 1944 (format_type('varbit'::regtype, -1)), 1945 (format_type('varchar'::regtype, -1)), 1946 (format_type('int[]'::regtype, -1)), 1947 (format_type('int2[]'::regtype, -1)), 1948 (format_type('string[]'::regtype, -1)), 1949 (format_type('varchar[]'::regtype, -1)) 1950 ---- 1951 anyelement 1952 bit 1953 boolean 1954 bytea 1955 bpchar 1956 date 1957 numeric 1958 double precision 1959 real 1960 interval 1961 numeric 1962 oid 1963 oidvector 1964 inet 1965 bigint 1966 integer 1967 smallint 1968 int2vector 1969 interval 1970 jsonb 1971 name 1972 regclass 1973 regnamespace 1974 regproc 1975 regprocedure 1976 regtype 1977 text 1978 time without time zone 1979 timestamp without time zone 1980 timestamp with time zone 1981 record 1982 uuid 1983 unknown 1984 bit varying 1985 character varying 1986 bigint[] 1987 smallint[] 1988 text[] 1989 character varying[] 1990 1991 query T 1992 VALUES (format_type('anyelement'::regtype, NULL)), 1993 (format_type('bool'::regtype, NULL)), 1994 (format_type('bytea'::regtype, NULL)), 1995 (format_type('date'::regtype, NULL)), 1996 (format_type('numeric'::regtype, NULL)), 1997 (format_type('interval'::regtype, NULL)), 1998 (format_type('timestamp'::regtype, NULL)), 1999 (format_type('timestamptz'::regtype, NULL)), 2000 (format_type('record'::regtype, NULL)) 2001 ---- 2002 anyelement 2003 boolean 2004 bytea 2005 date 2006 numeric 2007 interval 2008 timestamp without time zone 2009 timestamp with time zone 2010 record 2011 2012 query T 2013 SELECT format_type(oid, -1) FROM pg_type WHERE typname='text' LIMIT 1 2014 ---- 2015 text 2016 2017 query T 2018 SELECT format_type(oid, -1) FROM pg_type WHERE typname='int8' LIMIT 1 2019 ---- 2020 bigint 2021 2022 query T 2023 SELECT format_type(oid, -1) FROM pg_type WHERE typname='float8' LIMIT 1 2024 ---- 2025 double precision 2026 2027 query T 2028 SELECT format_type(oid, -1) FROM pg_type WHERE typname='_int8' LIMIT 1 2029 ---- 2030 bigint[] 2031 2032 query T 2033 SELECT format_type(oid, -1) FROM pg_type WHERE typname='_text' LIMIT 1 2034 ---- 2035 text[] 2036 2037 query T 2038 SELECT pg_catalog.pg_get_userbyid((SELECT oid FROM pg_roles WHERE rolname='root')) 2039 ---- 2040 root 2041 2042 query T 2043 SELECT pg_catalog.pg_get_userbyid(20) 2044 ---- 2045 unknown (OID=20) 2046 2047 query T 2048 SELECT pg_catalog.pg_get_indexdef(0) 2049 ---- 2050 NULL 2051 2052 statement ok 2053 CREATE TABLE test.pg_indexdef_test (a INT, UNIQUE INDEX pg_indexdef_idx (a ASC), INDEX other (a DESC)) 2054 2055 query T 2056 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_idx')) 2057 ---- 2058 CREATE UNIQUE INDEX pg_indexdef_idx ON test.public.pg_indexdef_test USING btree (a ASC) 2059 2060 query T 2061 SELECT pg_catalog.pg_get_indexdef(0, 0, true) 2062 ---- 2063 NULL 2064 2065 query T 2066 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_idx'), 0, true) 2067 ---- 2068 CREATE UNIQUE INDEX pg_indexdef_idx ON test.public.pg_indexdef_test USING btree (a ASC) 2069 2070 statement ok 2071 CREATE TABLE test.pg_indexdef_test_cols (a INT, b INT, UNIQUE INDEX pg_indexdef_cols_idx (a ASC, b DESC), INDEX other (a DESC)) 2072 2073 query T 2074 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), 0, true) 2075 ---- 2076 CREATE UNIQUE INDEX pg_indexdef_cols_idx ON test.public.pg_indexdef_test_cols USING btree (a ASC, b DESC) 2077 2078 query T 2079 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), 1, true) 2080 ---- 2081 a 2082 2083 query T 2084 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), 2, false) 2085 ---- 2086 b 2087 2088 query T 2089 SELECT pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), 3, false) 2090 ---- 2091 rowid 2092 2093 query I 2094 SELECT length(pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), 4, false)) 2095 ---- 2096 0 2097 2098 query I 2099 SELECT length(pg_catalog.pg_get_indexdef((SELECT oid from pg_class WHERE relname='pg_indexdef_cols_idx'), -1, false)) 2100 ---- 2101 0 2102 2103 query T 2104 SELECT pg_catalog.pg_get_viewdef(0) 2105 ---- 2106 NULL 2107 2108 statement ok 2109 CREATE TABLE test.pg_viewdef_test (a int, b int, c int) 2110 2111 statement ok 2112 CREATE VIEW test.pg_viewdef_view AS SELECT a, b FROM test.pg_viewdef_test 2113 2114 query T 2115 SELECT pg_catalog.pg_get_viewdef('pg_viewdef_view'::regclass::oid) 2116 ---- 2117 SELECT a, b FROM test.public.pg_viewdef_test 2118 2119 query T 2120 SELECT pg_catalog.pg_get_viewdef(0, true) 2121 ---- 2122 NULL 2123 2124 query T 2125 SELECT pg_catalog.pg_get_viewdef(0, false) 2126 ---- 2127 NULL 2128 2129 query T 2130 SELECT pg_catalog.pg_get_viewdef('pg_viewdef_view'::regclass::oid, true) 2131 ---- 2132 SELECT a, b FROM test.public.pg_viewdef_test 2133 2134 query T 2135 SELECT pg_catalog.pg_get_viewdef('pg_viewdef_view'::regclass::oid, false) 2136 ---- 2137 SELECT a, b FROM test.public.pg_viewdef_test 2138 2139 statement ok 2140 CREATE TABLE test.pg_constraintdef_test ( 2141 a int, 2142 b int unique, 2143 c int check (c > a), 2144 FOREIGN KEY(a) REFERENCES test.pg_indexdef_test(a) ON DELETE CASCADE 2145 ) 2146 2147 query T rowsort 2148 SELECT pg_catalog.pg_get_constraintdef(oid) 2149 FROM pg_catalog.pg_constraint 2150 WHERE conrelid='pg_constraintdef_test'::regclass 2151 ---- 2152 FOREIGN KEY (a) REFERENCES pg_indexdef_test(a) ON DELETE CASCADE 2153 CHECK ((c > a)) 2154 UNIQUE (b ASC) 2155 2156 # These functions always return NULL since we don't support comments on vtable columns and databases. 2157 query TT 2158 SELECT col_description('pg_class'::regclass::oid, 2), 2159 shobj_description('pg_class'::regclass::oid, 'pg_class') 2160 ---- 2161 NULL NULL 2162 2163 # vtable comments are supported 2164 query TT 2165 SELECT regexp_replace(obj_description('pg_class'::regclass::oid), e' .*', '') AS comment1, 2166 regexp_replace(obj_description('pg_class'::regclass::oid, 'pg_class'), e' .*', '') AS comment2 2167 ---- 2168 tables tables 2169 2170 # Regular table column comments are supported. 2171 statement ok 2172 CREATE TABLE t(x INT); 2173 2174 statement ok 2175 COMMENT ON TABLE t IS 'waa' 2176 2177 statement ok 2178 COMMENT ON COLUMN t.x IS 'woo' 2179 2180 query TTTT 2181 SELECT obj_description('t'::regclass::oid), 2182 obj_description('t'::regclass::oid, 'pg_class'), 2183 obj_description('t'::regclass::oid, 'notexist'), 2184 col_description('t'::regclass, 1) 2185 ---- 2186 waa waa NULL woo 2187 2188 statement ok 2189 COMMENT ON DATABASE test is 'foo' 2190 2191 query TTTT 2192 SELECT shobj_description((select oid from pg_database where datname = 'defaultdb')::oid, 'pg_database'), 2193 shobj_description((select oid from pg_database where datname = 'test')::oid, 'pg_database'), 2194 shobj_description((select oid from pg_database where datname = 'notexist')::oid, 'pg_database'), 2195 shobj_description((select oid from pg_database where datname = 'test')::oid, 'notexist') 2196 ---- 2197 NULL foo NULL NULL 2198 2199 # Ensure that shobj_ and obj_description don't return the opposite type of 2200 # comments. 2201 query TT 2202 SELECT shobj_description('t'::regclass::oid, 'pg_class'), 2203 obj_description((select oid from pg_database where datname = 'test')::oid, 'pg_database') 2204 ---- 2205 NULL NULL 2206 2207 # Check that base function names are also visible in namespace pg_catalog. 2208 query I 2209 SELECT pg_catalog.length('hello') 2210 ---- 2211 5 2212 2213 query OOO 2214 SELECT oid(3), oid(0), oid(12023948723) 2215 ---- 2216 3 0 12023948723 2217 2218 query T 2219 SELECT to_english(i) FROM (VALUES (1), (13), (617), (-2), (-9223372036854775808)) AS a(i) 2220 ---- 2221 one 2222 one-three 2223 six-one-seven 2224 minus-two 2225 minus-nine-two-two-three-three-seven-two-zero-three-six-eight-five-four-seven-seven-five-eight-zero-eight 2226 2227 # Do some basic sanity checking of the variadic hash functions. 2228 query BBBBBBBBB 2229 SELECT 2230 sha512('1') = sha512('1'), 2231 sha512('1') = sha512('2'), 2232 sha512('1', '2') = sha512('1', '2'), 2233 sha512('1', '2') = sha512('2', '1'), 2234 sha512('1', '2') = sha512('12'), 2235 sha512('1', '2') = sha512('21'), 2236 sha512('bar') = sha512(b'bar':::bytes), 2237 sha512(b'bar'::bytes) = sha512(b'bar':::bytes), 2238 sha512(b'bar'::bytes) = sha512('bar') 2239 ---- 2240 true false true false true false true true true 2241 2242 # The hash functions should be stable, so verify that the following hashes 2243 # don't change. 2244 query T 2245 SELECT i FROM (VALUES 2246 (sha512(true::string)), 2247 (sha512(false::string)), 2248 (sha512(1::int::string)), 2249 (sha512(1.1::float::string)), 2250 (sha512('foo'::string)), 2251 (sha512('3m'::interval::string)), 2252 (sha512('2016-11-12'::date::string)), 2253 (sha512('2015-08-24 23:45:45.53453'::timestamptz::string)), 2254 (sha512(b'bar'::bytes)) 2255 ) AS a(i) 2256 ---- 2257 9120cd5faef07a08e971ff024a3fcbea1e3a6b44142a6d82ca28c6c42e4f852595bcf53d81d776f10541045abdb7c37950629415d0dc66c8d86c64a5606d32de 2258 719fa67eef49c4b2a2b83f0c62bddd88c106aaadb7e21ae057c8802b700e36f81fe3f144812d8b05d66dc663d908b25645e153262cf6d457aa34e684af9e328d 2259 4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a 2260 be09b235155bae6cb96b94ce4645260937e856ac3907d710850256e6351f50b428f948a7af33937445604f41cf3a3121b2dd069a057708ed1f047e133e09151e 2261 f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc6638326e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7 2262 95bce0fdbcf48ba9c944dae46238d89bbd6df696a0d0b7cc8fc16eeabd30c03d6d2506cfcce81de320b37bc677df1bd045ac9231b43ae11807773db3909d1220 2263 b2d173023893f71caadf7cb2f9557355462570de2c9c971b9cfa5494936e28df8e13d0db4d550aab66d5e7a002f678ddb02def092c069ce473cf5fb293953986 2264 960b0fed9378be1e9adefd91e1be6ac9c1de7208008dfec438ff845135727bebea0f7458a5181079f61288176e0168cfea501b900c3e495b3ab9bbe4d372486d 2265 d82c4eb5261cb9c8aa9855edd67d1bd10482f41529858d925094d173fa662aa91ff39bc5b188615273484021dfb16fd8284cf684ccf0fc795be3aa2fc1e6c181 2266 2267 # We only support one encoding, UTF8, which is hardcoded to id 6 just like in 2268 # Postgres. 2269 query TT 2270 SELECT pg_catalog.pg_encoding_to_char(6), pg_catalog.pg_encoding_to_char(7) 2271 ---- 2272 UTF8 NULL 2273 2274 # TODO(jordan): Restore this to original form by removing FROM 2275 # clause once issue 32876 is fixed. 2276 query TITI 2277 SELECT pg_catalog.inet_client_addr(), pg_catalog.inet_client_port(), pg_catalog.inet_server_addr(), pg_catalog.inet_server_port() 2278 FROM pg_class 2279 WHERE relname = 'pg_constraint' 2280 ---- 2281 ::/0 0 ::/0 0 2282 2283 query TTTT 2284 SELECT quote_ident('foo'), quote_ident('select'), quote_ident('int8'), quote_ident('numeric') 2285 ---- 2286 foo "select" int8 "numeric" 2287 2288 2289 query TT 2290 SELECT lpad('abc', 5, 'xy'), rpad('abc', 5, 'xy') 2291 ---- 2292 xyabc abcxy 2293 2294 query TT 2295 SELECT lpad('abc', 5, ''), rpad('abc', 5, '') 2296 ---- 2297 abc abc 2298 2299 query error requested length too large 2300 SELECT lpad('abc', 100000000000000) 2301 2302 query error requested length too large 2303 SELECT rpad('abc', 100000000000000) 2304 2305 query TT 2306 SELECT array_to_string(ARRAY['a', 'b,', NULL, 'c'], ','), array_to_string(ARRAY['a', 'b,', NULL, 'c'], ',', NULL) 2307 ---- 2308 a,b,,c a,b,,c 2309 2310 query TT 2311 SELECT array_to_string(ARRAY['a', 'b,', 'c'], NULL), array_to_string(ARRAY['a', 'b,', NULL, 'c'], 'foo', 'zerp') 2312 ---- 2313 NULL afoob,foozerpfooc 2314 2315 query TT 2316 SELECT array_to_string(NULL, ','), array_to_string(NULL, 'foo', 'zerp') 2317 ---- 2318 NULL NULL 2319 2320 subtest pg_is_in_recovery 2321 2322 query B colnames 2323 SELECT pg_is_in_recovery() 2324 ---- 2325 pg_is_in_recovery 2326 false 2327 2328 subtest pg_is_xlog_replay_paused 2329 2330 query B colnames 2331 SELECT pg_is_xlog_replay_paused() 2332 ---- 2333 pg_is_xlog_replay_paused 2334 false 2335 2336 query T 2337 SELECT pg_catalog.pg_client_encoding() 2338 ---- 2339 UTF8 2340 2341 subtest check_consistency 2342 2343 # Sanity-check crdb_internal.check_consistency. 2344 2345 statement error start key must be >= "\\x02" 2346 SELECT crdb_internal.check_consistency(true, '\x01', '\xffff') 2347 2348 statement error end key must be < "\\xff\\xff" 2349 SELECT crdb_internal.check_consistency(true, '\x02', '\xffff00') 2350 2351 statement error start key must be less than end key 2352 SELECT crdb_internal.check_consistency(true, '\x02', '\x02') 2353 2354 statement error start key must be less than end key 2355 SELECT crdb_internal.check_consistency(true, '\x03', '\x02') 2356 2357 query ITT 2358 SELECT range_id, status, regexp_replace(detail, '[0-9]+', '', 'g') FROM crdb_internal.check_consistency(true, '\x02', '\xffff') WHERE range_id = 1 2359 ---- 2360 1 RANGE_CONSISTENT stats: {ContainsEstimates: LastUpdateNanos: IntentAge: GCBytesAge: LiveBytes: LiveCount: KeyBytes: KeyCount: ValBytes: ValCount: IntentBytes: IntentCount: SysBytes: SysCount:} 2361 2362 # Without explicit keys, scans all ranges (we don't test this too precisely to 2363 # avoid flaking the test when the range count changes, just want to know that 2364 # we're touching multiple ranges). 2365 query B 2366 SELECT count(*) > 5 FROM crdb_internal.check_consistency(true, '', '') 2367 ---- 2368 true 2369 2370 # Query that should touch only a single range. 2371 query B 2372 SELECT count(*) = 1 FROM crdb_internal.check_consistency(true, '\x03', '\x0300') 2373 ---- 2374 true 2375 2376 # Ditto, but implicit start key \x02 2377 query B 2378 SELECT count(*) = 1 FROM crdb_internal.check_consistency(true, '', '\x0200') 2379 ---- 2380 true 2381 2382 # Ditto, but implicit end key. 2383 query B 2384 SELECT count(*) = 1 FROM crdb_internal.check_consistency(true, '\xff', '') 2385 ---- 2386 true 2387 2388 # Tests for width_bucket builtin 2389 query I 2390 SELECT width_bucket(8.0, 2.0, 3.0, 5) 2391 ---- 2392 6 2393 2394 query I 2395 SELECT width_bucket(5.35, 0.024, 10.06, 5) 2396 ---- 2397 3 2398 2399 query I 2400 SELECT width_bucket(7, 3, 11, 5) 2401 ---- 2402 3 2403 2404 query I 2405 SELECT width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) 2406 ---- 2407 2 2408 2409 query error pq: width_bucket\(\): Operand and thresholds must be of the same type 2410 SELECT width_bucket(1, array['a', 'h', 'l', 'z']); 2411 2412 # Regression for #40623 2413 query I 2414 SELECT width_bucket(1, array[]::int[]); 2415 ---- 2416 0 2417 2418 # Sanity check pg_type_is_visible. 2419 query BBB 2420 SELECT pg_type_is_visible('int'::regtype), pg_type_is_visible(NULL), pg_type_is_visible(99999) 2421 ---- 2422 true NULL NULL 2423 2424 # Sanity check pg_get_function_identity_arguments. 2425 query T 2426 SELECT pg_get_function_identity_arguments('convert_from'::regproc::oid) 2427 ---- 2428 bytea, text 2429 2430 # This produces an empty string in Postgres too. 2431 query T 2432 SELECT pg_get_function_identity_arguments('version'::regproc::oid) 2433 ---- 2434 · 2435 2436 query T 2437 SELECT pg_get_function_identity_arguments('array_length'::regproc) 2438 ---- 2439 anyarray, int8 2440 2441 query T 2442 SELECT pg_get_function_identity_arguments((select oid from pg_proc where proname='variance' and proargtypes[0] = 'int'::regtype)) 2443 ---- 2444 int8 2445 2446 # Sanity check pg_get_function_result. 2447 2448 query T 2449 SELECT pg_get_function_result('array_length'::regproc) 2450 ---- 2451 int8 2452 2453 query T 2454 SELECT pg_get_function_result((select oid from pg_proc where proname='variance' and proargtypes[0] = 'int'::regtype)) 2455 ---- 2456 numeric 2457 2458 query T 2459 SELECT pg_get_function_result('pg_sleep'::regproc) 2460 ---- 2461 bool 2462 2463 # Note in Postgres <= 9.5, returns SETOF anyelement. 2464 query error pq: more than one function named 'unnest' 2465 SELECT pg_get_function_result('unnest'::regproc); 2466 2467 # Regression test for #40297. 2468 statement ok 2469 CREATE TABLE t40297 AS SELECT g FROM generate_series(NULL, NULL) AS g 2470 2471 query I 2472 SELECT COALESCE((SELECT ()), NULL) FROM t40297 2473 ---- 2474 2475 query T 2476 SELECT CASE WHEN true THEN (1, 2) ELSE NULL END 2477 ---- 2478 (1,2) 2479 2480 query B 2481 SELECT (1, 2) IN ((2, 3), NULL, (1, 2)) 2482 ---- 2483 true 2484 2485 query B 2486 SELECT (1, 2) IN ((2, 3), NULL) 2487 ---- 2488 NULL 2489 2490 # Test for regression in hex functions. 2491 subtest regression_41707 2492 2493 # The int8 casts make it match postgres behavior - unfortunately, we do not default to int4. 2494 query TTTTTTT 2495 select to_hex(-2147483649), to_hex(-2147483648::int8), to_hex(-1::int8), to_hex(0), to_hex(1), to_hex(2147483647), to_hex(2147483648) 2496 ---- 2497 ffffffff7fffffff ffffffff80000000 ffffffffffffffff 0 1 7fffffff 80000000 2498 2499 query T 2500 select to_hex(E'\\047\\134'::bytea) 2501 ---- 2502 275c 2503 2504 query T 2505 select to_hex('abc') 2506 ---- 2507 616263 2508 2509 # Test crdb_internal commands which execute as root, but 2510 # only checks for permissions afterwards. 2511 subtest crdb_internal_privileged_only 2512 2513 user root 2514 2515 statement ok 2516 CREATE DATABASE root_test 2517 2518 statement ok 2519 CREATE TABLE root_test.t(a int) 2520 2521 statement ok 2522 ALTER DATABASE root_test CONFIGURE ZONE USING num_replicas = 5 2523 2524 query I 2525 SELECT crdb_internal.get_namespace_id(0, 'does_not_exist') 2526 ---- 2527 NULL 2528 2529 query I 2530 SELECT crdb_internal.get_namespace_id(0, 'root_test') 2531 ---- 2532 61 2533 2534 query I 2535 SELECT crdb_internal.get_namespace_id(crdb_internal.get_namespace_id(0, 'root_test'), 't') 2536 ---- 2537 62 2538 2539 query T 2540 SELECT crdb_internal.get_zone_config(-1)::string 2541 ---- 2542 NULL 2543 2544 query T 2545 SELECT crdb_internal.get_zone_config(crdb_internal.get_namespace_id(0, 'root_test'))::string 2546 ---- 2547 \x280550015801 2548 2549 query T 2550 SELECT crdb_internal.get_zone_config(crdb_internal.get_namespace_id(crdb_internal.get_namespace_id(0, 'root_test'), 't'))::string 2551 ---- 2552 NULL 2553 2554 # switch users -- this one has no permissions so expect errors 2555 user testuser 2556 2557 query I 2558 SELECT crdb_internal.get_namespace_id(0, 'does_not_exist') 2559 ---- 2560 NULL 2561 2562 query error insufficient privilege 2563 SELECT crdb_internal.get_namespace_id(0, 'root_test') 2564 2565 query T 2566 SELECT crdb_internal.get_zone_config(-1)::string 2567 ---- 2568 NULL 2569 2570 query error insufficient privilege 2571 SELECT crdb_internal.get_zone_config(61)::string -- based on root query. having no permissions blocks us from this test rapidly changing though. 2572 2573 # give testuser permissions on everything and retest 2574 user root 2575 2576 statement ok 2577 GRANT ALL ON DATABASE root_test TO testuser 2578 2579 statement ok 2580 GRANT ALL ON root_test.t TO testuser 2581 2582 user testuser 2583 2584 query I 2585 SELECT crdb_internal.get_namespace_id(0, 'root_test') 2586 ---- 2587 61 2588 2589 query I 2590 SELECT crdb_internal.get_namespace_id(crdb_internal.get_namespace_id(0, 'root_test'), 't') 2591 ---- 2592 62 2593 2594 query T 2595 SELECT crdb_internal.get_zone_config(crdb_internal.get_namespace_id(0, 'root_test'))::string 2596 ---- 2597 \x280550015801 2598 2599 query T 2600 SELECT crdb_internal.get_zone_config(crdb_internal.get_namespace_id(crdb_internal.get_namespace_id(0, 'root_test'), 't'))::string 2601 ---- 2602 NULL 2603 2604 # reset state to default 2605 user root 2606 2607 statement ok 2608 DROP DATABASE root_test CASCADE 2609 2610 # Test for timezone builtin. 2611 subtest timezone_test 2612 2613 statement ok 2614 SET TIME ZONE -3 2615 2616 query T 2617 SELECT timezone('UTC+6', '1970-01-01 01:00') 2618 ---- 2619 1969-12-31 22:00:00 +0000 +0000 2620 2621 query T 2622 SELECT timezone('UTC+6', '1970-01-01 01:00'::time) 2623 ---- 2624 0000-01-01 22:00:00 -0600 -0600 2625 2626 query T 2627 SELECT timezone('UTC+6', '1970-01-01 01:00'::timetz) 2628 ---- 2629 0000-01-01 22:00:00 -0600 -0600 2630 2631 query T 2632 SELECT timezone('UTC+6', '1970-01-01 01:00'::timestamp) 2633 ---- 2634 1970-01-01 04:00:00 -0300 -0300 2635 2636 query T 2637 SELECT timezone('UTC+6', '1970-01-01 01:00'::timestamptz) 2638 ---- 2639 1969-12-31 22:00:00 +0000 +0000 2640 2641 statement ok 2642 SET TIME ZONE +0 2643 2644 subtest getdatabaseencoding 2645 2646 query T 2647 SELECT getdatabaseencoding() 2648 ---- 2649 UTF8 2650 2651 subtest get_bit 2652 2653 query I rowsort 2654 SELECT get_bit(B'100101110101', 3) UNION SELECT get_bit(B'100101110101', 2) 2655 ---- 2656 1 2657 0 2658 2659 query I rowsort 2660 SELECT get_bit('000000'::varbit, 5) UNION SELECT get_bit('1111111'::varbit, 5) 2661 ---- 2662 1 2663 0 2664 2665 query error get_bit\(\): GetBitAtIndex: bit index 10 out of valid range \(0..4\) 2666 SELECT get_bit(B'10110', 10) 2667 2668 query error get_bit\(\): GetBitAtIndex: bit index 0 out of valid range \(0..-1\) 2669 SELECT get_bit(B'', 0); 2670 2671 # Binary representation of 'l' is 01101100 2672 # Binary representation of \o145 is 01100101 2673 # Binary representation of \x61\x62\x6C are 01100001 01100010 01101100 2674 2675 query I rowsort 2676 SELECT get_bit(b'\145\x6C\l', 0) UNION SELECT get_bit(b'\145\x6C\l', 13) 2677 ---- 2678 0 2679 1 2680 2681 query I rowsort 2682 SELECT get_bit(b'\145', 7) UNION SELECT get_bit(b'\145', 0) 2683 ---- 2684 1 2685 0 2686 2687 query I rowsort 2688 SELECT get_bit('\x6162'::bytea, 7) UNION SELECT get_bit('\x6162'::bytea, 12) 2689 ---- 2690 1 2691 0 2692 2693 query error get_bit\(\): bit index 8 out of valid range \(0..7\) 2694 SELECT get_bit(b'\x61', 8) 2695 2696 query error get_bit\(\): bit index 0 out of valid range \(0..-1\) 2697 SELECT get_bit(b'', 0) 2698 2699 subtest set_bit 2700 2701 query T rowsort 2702 SELECT set_bit(B'1101010', 0, 0) UNION SELECT set_bit(B'1101010', 2, 1) 2703 ---- 2704 0101010 2705 1111010 2706 2707 query T rowsort 2708 SELECT set_bit('000000'::varbit, 5, 1) UNION SELECT set_bit('111111'::varbit, 5, 0) 2709 ---- 2710 000001 2711 111110 2712 2713 query error set_bit\(\): SetBitAtIndex: bit index 10 out of valid range \(0..6\) 2714 SELECT set_bit(B'1101010', 10, 1) 2715 2716 query error set_bit\(\): new bit must be 0 or 1. 2717 SELECT set_bit(B'1001010', 0, 2) 2718 2719 query error set_bit\(\): SetBitAtIndex: bit index 0 out of valid range \(0..-1\) 2720 SELECT set_bit(B'', 0, 1) 2721 2722 # Binary representation of 'a' 'b' 'c' 'f' 'l' are 01100001 01100010 01100011 01100110 01101100 2723 # Binary representation of \o145 is 1100101 2724 # Binary representation of \x61\x62\x66\x6C are 01100001 01100010 01100110 01101100 2725 2726 query T rowsort 2727 SELECT set_bit(b'ab', 6, 1) UNION SELECT set_bit(b'\x61\x66', 15, 0) 2728 ---- 2729 cb 2730 af 2731 2732 query T rowsort 2733 SELECT set_bit('a'::bytea, 5, 0) UNION SELECT set_bit('\x6162'::bytea, 13, 1) 2734 ---- 2735 a 2736 af 2737 2738 query error set_bit\(\): bit index 16 out of valid range \(0..15\) 2739 SELECT set_bit(b'ac', 16, 0) 2740 2741 query error set_bit\(\): bit index 0 out of valid range \(0..-1\) 2742 SELECT set_bit(b'', 0, 1) 2743 2744 query error set_bit\(\): new bit must be 0 or 1. 2745 SELECT set_bit(b'\145\x6C\l', 0, 2)