Consistently use "superuser" instead of "super user"
[pgsql.git] / src / test / regress / expected / misc_functions.out
blobe845042d38de7c69fffc6153fe19760e2228a183
1 --
2 -- num_nulls()
3 --
4 SELECT num_nonnulls(NULL);
5  num_nonnulls 
6 --------------
7             0
8 (1 row)
10 SELECT num_nonnulls('1');
11  num_nonnulls 
12 --------------
13             1
14 (1 row)
16 SELECT num_nonnulls(NULL::text);
17  num_nonnulls 
18 --------------
19             0
20 (1 row)
22 SELECT num_nonnulls(NULL::text, NULL::int);
23  num_nonnulls 
24 --------------
25             0
26 (1 row)
28 SELECT num_nonnulls(1, 2, NULL::text, NULL::point, '', int8 '9', 1.0 / NULL);
29  num_nonnulls 
30 --------------
31             4
32 (1 row)
34 SELECT num_nonnulls(VARIADIC '{1,2,NULL,3}'::int[]);
35  num_nonnulls 
36 --------------
37             3
38 (1 row)
40 SELECT num_nonnulls(VARIADIC '{"1","2","3","4"}'::text[]);
41  num_nonnulls 
42 --------------
43             4
44 (1 row)
46 SELECT num_nonnulls(VARIADIC ARRAY(SELECT CASE WHEN i <> 40 THEN i END FROM generate_series(1, 100) i));
47  num_nonnulls 
48 --------------
49            99
50 (1 row)
52 SELECT num_nulls(NULL);
53  num_nulls 
54 -----------
55          1
56 (1 row)
58 SELECT num_nulls('1');
59  num_nulls 
60 -----------
61          0
62 (1 row)
64 SELECT num_nulls(NULL::text);
65  num_nulls 
66 -----------
67          1
68 (1 row)
70 SELECT num_nulls(NULL::text, NULL::int);
71  num_nulls 
72 -----------
73          2
74 (1 row)
76 SELECT num_nulls(1, 2, NULL::text, NULL::point, '', int8 '9', 1.0 / NULL);
77  num_nulls 
78 -----------
79          3
80 (1 row)
82 SELECT num_nulls(VARIADIC '{1,2,NULL,3}'::int[]);
83  num_nulls 
84 -----------
85          1
86 (1 row)
88 SELECT num_nulls(VARIADIC '{"1","2","3","4"}'::text[]);
89  num_nulls 
90 -----------
91          0
92 (1 row)
94 SELECT num_nulls(VARIADIC ARRAY(SELECT CASE WHEN i <> 40 THEN i END FROM generate_series(1, 100) i));
95  num_nulls 
96 -----------
97          1
98 (1 row)
100 -- special cases
101 SELECT num_nonnulls(VARIADIC NULL::text[]);
102  num_nonnulls 
103 --------------
104              
105 (1 row)
107 SELECT num_nonnulls(VARIADIC '{}'::int[]);
108  num_nonnulls 
109 --------------
110             0
111 (1 row)
113 SELECT num_nulls(VARIADIC NULL::text[]);
114  num_nulls 
115 -----------
116           
117 (1 row)
119 SELECT num_nulls(VARIADIC '{}'::int[]);
120  num_nulls 
121 -----------
122          0
123 (1 row)
125 -- should fail, one or more arguments is required
126 SELECT num_nonnulls();
127 ERROR:  function num_nonnulls() does not exist
128 LINE 1: SELECT num_nonnulls();
129                ^
130 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
131 SELECT num_nulls();
132 ERROR:  function num_nulls() does not exist
133 LINE 1: SELECT num_nulls();
134                ^
135 HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
137 -- pg_log_backend_memory_contexts()
139 -- Memory contexts are logged and they are not returned to the function.
140 -- Furthermore, their contents can vary depending on the timing. However,
141 -- we can at least verify that the code doesn't fail.
143 SELECT * FROM pg_log_backend_memory_contexts(pg_backend_pid());
144  pg_log_backend_memory_contexts 
145 --------------------------------
147 (1 row)
150 -- Test some built-in SRFs
152 -- The outputs of these are variable, so we can't just print their results
153 -- directly, but we can at least verify that the code doesn't fail.
155 select setting as segsize
156 from pg_settings where name = 'wal_segment_size'
157 \gset
158 select count(*) > 0 as ok from pg_ls_waldir();
159  ok 
160 ----
162 (1 row)
164 -- Test ProjectSet as well as FunctionScan
165 select count(*) > 0 as ok from (select pg_ls_waldir()) ss;
166  ok 
167 ----
169 (1 row)
171 -- Test not-run-to-completion cases.
172 select * from pg_ls_waldir() limit 0;
173  name | size | modification 
174 ------+------+--------------
175 (0 rows)
177 select count(*) > 0 as ok from (select * from pg_ls_waldir() limit 1) ss;
178  ok 
179 ----
181 (1 row)
183 select (w).size = :segsize as ok
184 from (select pg_ls_waldir() w) ss where length((w).name) = 24 limit 1;
185  ok 
186 ----
188 (1 row)
190 select count(*) >= 0 as ok from pg_ls_archive_statusdir();
191  ok 
192 ----
194 (1 row)
196 select * from (select pg_ls_dir('.') a) a where a = 'base' limit 1;
197   a   
198 ------
199  base
200 (1 row)
202 select * from (select (pg_timezone_names()).name) ptn where name='UTC' limit 1;
203  name 
204 ------
205  UTC
206 (1 row)
208 select count(*) > 0 from
209   (select pg_tablespace_databases(oid) as pts from pg_tablespace
210    where spcname = 'pg_default') pts
211   join pg_database db on pts.pts = db.oid;
212  ?column? 
213 ----------
215 (1 row)
218 -- Test adding a support function to a subject function
220 CREATE FUNCTION my_int_eq(int, int) RETURNS bool
221   LANGUAGE internal STRICT IMMUTABLE PARALLEL SAFE
222   AS $$int4eq$$;
223 -- By default, planner does not think that's selective
224 EXPLAIN (COSTS OFF)
225 SELECT * FROM tenk1 a JOIN tenk1 b ON a.unique1 = b.unique1
226 WHERE my_int_eq(a.unique2, 42);
227                   QUERY PLAN                  
228 ----------------------------------------------
229  Hash Join
230    Hash Cond: (b.unique1 = a.unique1)
231    ->  Seq Scan on tenk1 b
232    ->  Hash
233          ->  Seq Scan on tenk1 a
234                Filter: my_int_eq(unique2, 42)
235 (6 rows)
237 -- With support function that knows it's int4eq, we get a different plan
238 ALTER FUNCTION my_int_eq(int, int) SUPPORT test_support_func;
239 EXPLAIN (COSTS OFF)
240 SELECT * FROM tenk1 a JOIN tenk1 b ON a.unique1 = b.unique1
241 WHERE my_int_eq(a.unique2, 42);
242                    QUERY PLAN                    
243 -------------------------------------------------
244  Nested Loop
245    ->  Seq Scan on tenk1 a
246          Filter: my_int_eq(unique2, 42)
247    ->  Index Scan using tenk1_unique1 on tenk1 b
248          Index Cond: (unique1 = a.unique1)
249 (5 rows)
251 -- Also test non-default rowcount estimate
252 CREATE FUNCTION my_gen_series(int, int) RETURNS SETOF integer
253   LANGUAGE internal STRICT IMMUTABLE PARALLEL SAFE
254   AS $$generate_series_int4$$
255   SUPPORT test_support_func;
256 EXPLAIN (COSTS OFF)
257 SELECT * FROM tenk1 a JOIN my_gen_series(1,1000) g ON a.unique1 = g;
258                QUERY PLAN               
259 ----------------------------------------
260  Hash Join
261    Hash Cond: (g.g = a.unique1)
262    ->  Function Scan on my_gen_series g
263    ->  Hash
264          ->  Seq Scan on tenk1 a
265 (5 rows)
267 EXPLAIN (COSTS OFF)
268 SELECT * FROM tenk1 a JOIN my_gen_series(1,10) g ON a.unique1 = g;
269                    QUERY PLAN                    
270 -------------------------------------------------
271  Nested Loop
272    ->  Function Scan on my_gen_series g
273    ->  Index Scan using tenk1_unique1 on tenk1 a
274          Index Cond: (unique1 = g.g)
275 (4 rows)