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)