Skip to main content

mz_pgrepr_consts/
regproc.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10//! Text renderings of `regproc` values.
11//!
12//! PostgreSQL renders a `regproc` in text format through `regprocout`, which
13//! resolves the OID to the function's name. Materialize has no
14//! `CREATE FUNCTION`, so every function is a builtin and the OID to name
15//! mapping is fixed when the binary is built. That is what makes a static
16//! table viable: the text encoder has no catalog access and cannot gain any,
17//! because the catalog crates depend on `mz-pgrepr` rather than the reverse,
18//! and some encode paths run in `clusterd`, which has no catalog at all.
19//!
20//! [`NAMES`] is derived from Materialize's builtin function registry, reached
21//! through `mz_catalog::builtin::BUILTINS::funcs()`, which is the authoritative
22//! definition of every function OID. `mz_catalog::builtin`'s
23//! `test_regproc_names_match_builtin_functions` recomputes the whole table from
24//! that registry and fails when the two have drifted, so do not hand-edit
25//! entries here. Add the function to the registry, then regenerate the table:
26//!
27//! ```shell
28//! REWRITE=1 cargo test -p mz-catalog test_regproc_names_match_builtin_functions
29//! ```
30//!
31//! The OIDs are not invented by Materialize wherever PostgreSQL already assigns
32//! one. `mz_sql::func`'s `PG_CATALOG_BUILTINS` records that its literal OIDs
33//! were read out of a PostgreSQL 13 `pg_proc`, and points at
34//! <https://github.com/postgres/postgres/blob/master/src/include/catalog/pg_proc.dat>
35//! for the same values. Everything else draws from [`crate::oid`], which carves
36//! out `FIRST_UNPINNED_OID` upward for functions PostgreSQL ships without a
37//! pinned OID, and `FIRST_MATERIALIZE_OID` upward for functions that exist only
38//! in Materialize.
39
40/// Every builtin function OID paired with the text `regproc` renders it as,
41/// sorted by OID.
42///
43/// The name is schema-qualified whenever the bare name would not resolve back to
44/// this OID, which is the rule `regprocout` applies.
45///
46/// NOTE: The rendering assumes the default search path, which is all a static
47/// table can do. A session with `mz_internal` or `mz_unsafe` on its
48/// `search_path` makes those bare names resolvable, so the SQL cast from
49/// `regproc` to `text` renders them bare where this table still qualifies them.
50///
51/// NOTE: Reserved words are left unquoted here, so `left` renders as `left`
52/// where PostgreSQL's `regprocout` renders `"left"`. This matches the SQL cast
53/// from `regproc` to `text`, and the unquoted form still resolves because
54/// `regprocin` accepts a reserved word either way.
55pub const NAMES: &[(u32, &str)] = &[
56    // BEGIN GENERATED
57    (34, "namein"),
58    (38, "int2in"),
59    (40, "int2vectorin"),
60    (42, "int4in"),
61    (44, "regprocin"),
62    (46, "textin"),
63    (89, "version"),
64    (200, "float4in"),
65    (214, "float8in"),
66    (376, "pg_catalog.string_to_array"),
67    (383, "array_cat"),
68    (384, "pg_catalog.array_to_string"),
69    (394, "pg_catalog.string_to_array"),
70    (395, "pg_catalog.array_to_string"),
71    (460, "int8in"),
72    (720, "pg_catalog.octet_length"),
73    (721, "get_byte"),
74    (723, "get_bit"),
75    (745, "current_user"),
76    (746, "session_user"),
77    (750, "array_in"),
78    (849, "position"),
79    (861, "current_database"),
80    (868, "strpos"),
81    (870, "pg_catalog.lower"),
82    (871, "pg_catalog.upper"),
83    (872, "initcap"),
84    (873, "pg_catalog.lpad"),
85    (875, "pg_catalog.ltrim"),
86    (876, "pg_catalog.rtrim"),
87    (877, "pg_catalog.substr"),
88    (878, "translate"),
89    (879, "pg_catalog.lpad"),
90    (881, "pg_catalog.ltrim"),
91    (882, "pg_catalog.rtrim"),
92    (883, "pg_catalog.substr"),
93    (884, "pg_catalog.btrim"),
94    (885, "pg_catalog.btrim"),
95    (936, "pg_catalog.substring"),
96    (937, "pg_catalog.substring"),
97    (938, "pg_catalog.generate_series"),
98    (939, "pg_catalog.generate_series"),
99    (940, "pg_catalog.mod"),
100    (941, "pg_catalog.mod"),
101    (947, "pg_catalog.mod"),
102    (1026, "pg_catalog.timezone"),
103    (1031, "aclitemin"),
104    (1044, "bpcharin"),
105    (1046, "varcharin"),
106    (1066, "pg_catalog.generate_series"),
107    (1067, "pg_catalog.generate_series"),
108    (1068, "pg_catalog.generate_series"),
109    (1069, "pg_catalog.generate_series"),
110    (1081, "format_type"),
111    (1084, "date_in"),
112    (1143, "time_in"),
113    (1150, "timestamptz_in"),
114    (1158, "to_timestamp"),
115    (1159, "pg_catalog.timezone"),
116    (1160, "interval_in"),
117    (1171, "pg_catalog.date_part"),
118    (1172, "pg_catalog.date_part"),
119    (1175, "justify_hours"),
120    (1178, "pg_catalog.date"),
121    (1192, "generate_subscripts"),
122    (1193, "pg_catalog.array_fill"),
123    (1194, "pg_catalog.log10"),
124    (1199, "pg_catalog.age"),
125    (1215, "obj_description"),
126    (1216, "col_description"),
127    (1217, "pg_catalog.date_trunc"),
128    (1218, "pg_catalog.date_trunc"),
129    (1242, "boolin"),
130    (1244, "byteain"),
131    (1245, "charin"),
132    (1268, "pg_catalog.parse_ident"),
133    (1269, "pg_column_size"),
134    (1282, "quote_ident"),
135    (1286, "pg_catalog.array_fill"),
136    (1295, "justify_days"),
137    (1299, "now"),
138    (1312, "timestamp_in"),
139    (1317, "pg_catalog.length"),
140    (1340, "pg_catalog.log"),
141    (1341, "pg_catalog.ln"),
142    (1342, "pg_catalog.round"),
143    (1343, "pg_catalog.trunc"),
144    (1344, "pg_catalog.sqrt"),
145    (1345, "cbrt"),
146    (1346, "pow"),
147    (1347, "pg_catalog.exp"),
148    (1365, "makeaclitem"),
149    (1368, "pg_catalog.power"),
150    (1374, "pg_catalog.octet_length"),
151    (1375, "pg_catalog.octet_length"),
152    (1381, "char_length"),
153    (1385, "pg_catalog.date_part"),
154    (1387, "pg_catalog.pg_get_constraintdef"),
155    (1394, "pg_catalog.abs"),
156    (1395, "pg_catalog.abs"),
157    (1396, "pg_catalog.abs"),
158    (1397, "pg_catalog.abs"),
159    (1398, "pg_catalog.abs"),
160    (1402, "current_schema"),
161    (1403, "current_schemas"),
162    (1481, "pg_catalog.log10"),
163    (1573, "pg_catalog.pg_get_ruledef"),
164    (1597, "pg_encoding_to_char"),
165    (1600, "asin"),
166    (1601, "acos"),
167    (1602, "atan"),
168    (1604, "sin"),
169    (1605, "cos"),
170    (1606, "tan"),
171    (1607, "cot"),
172    (1608, "degrees"),
173    (1609, "radians"),
174    (1619, "pg_typeof"),
175    (1620, "ascii"),
176    (1621, "chr"),
177    (1622, "repeat"),
178    (1637, "like_escape"),
179    (1640, "pg_catalog.pg_get_viewdef"),
180    (1641, "pg_catalog.pg_get_viewdef"),
181    (1642, "pg_get_userbyid"),
182    (1643, "pg_catalog.pg_get_indexdef"),
183    (1689, "aclexplode"),
184    (1701, "numeric_in"),
185    (1705, "pg_catalog.abs"),
186    (1707, "pg_catalog.round"),
187    (1708, "pg_catalog.round"),
188    (1710, "pg_catalog.trunc"),
189    (1711, "pg_catalog.ceil"),
190    (1712, "pg_catalog.floor"),
191    (1713, "pg_catalog.length"),
192    (1714, "convert_from"),
193    (1716, "pg_catalog.pg_get_expr"),
194    (1728, "pg_catalog.mod"),
195    (1730, "pg_catalog.sqrt"),
196    (1732, "pg_catalog.exp"),
197    (1734, "pg_catalog.ln"),
198    (1736, "pg_catalog.log"),
199    (1741, "pg_catalog.log"),
200    (1770, "pg_catalog.to_char"),
201    (1798, "oidin"),
202    (1810, "pg_catalog.bit_length"),
203    (1811, "pg_catalog.bit_length"),
204    (1922, "pg_catalog.has_table_privilege"),
205    (1923, "pg_catalog.has_table_privilege"),
206    (1924, "pg_catalog.has_table_privilege"),
207    (1925, "pg_catalog.has_table_privilege"),
208    (1926, "pg_catalog.has_table_privilege"),
209    (1927, "pg_catalog.has_table_privilege"),
210    (1928, "pg_stat_get_numscans"),
211    (1946, "encode"),
212    (1947, "decode"),
213    (2010, "pg_catalog.length"),
214    (2020, "pg_catalog.date_trunc"),
215    (2021, "pg_catalog.date_part"),
216    (2026, "pg_backend_pid"),
217    (2029, "pg_catalog.date"),
218    (2037, "pg_catalog.timezone"),
219    (2038, "pg_catalog.timezone"),
220    (2049, "pg_catalog.to_char"),
221    (2058, "pg_catalog.age"),
222    (2069, "pg_catalog.timezone"),
223    (2070, "pg_catalog.timezone"),
224    (2077, "pg_catalog.current_setting"),
225    (2079, "pg_table_is_visible"),
226    (2080, "pg_type_is_visible"),
227    (2081, "pg_function_is_visible"),
228    (2087, "replace"),
229    (2088, "split_part"),
230    (2091, "array_lower"),
231    (2092, "array_upper"),
232    (2100, "pg_catalog.avg"),
233    (2101, "pg_catalog.avg"),
234    (2102, "pg_catalog.avg"),
235    (2104, "pg_catalog.avg"),
236    (2105, "pg_catalog.avg"),
237    (2106, "pg_catalog.avg"),
238    (2107, "pg_catalog.sum"),
239    (2108, "pg_catalog.sum"),
240    (2109, "pg_catalog.sum"),
241    (2110, "pg_catalog.sum"),
242    (2111, "pg_catalog.sum"),
243    (2113, "pg_catalog.sum"),
244    (2114, "pg_catalog.sum"),
245    (2115, "pg_catalog.max"),
246    (2116, "pg_catalog.max"),
247    (2117, "pg_catalog.max"),
248    (2119, "pg_catalog.max"),
249    (2120, "pg_catalog.max"),
250    (2122, "pg_catalog.max"),
251    (2123, "pg_catalog.max"),
252    (2126, "pg_catalog.max"),
253    (2127, "pg_catalog.max"),
254    (2128, "pg_catalog.max"),
255    (2129, "pg_catalog.max"),
256    (2131, "pg_catalog.min"),
257    (2132, "pg_catalog.min"),
258    (2133, "pg_catalog.min"),
259    (2135, "pg_catalog.min"),
260    (2136, "pg_catalog.min"),
261    (2138, "pg_catalog.min"),
262    (2139, "pg_catalog.min"),
263    (2142, "pg_catalog.min"),
264    (2143, "pg_catalog.min"),
265    (2144, "pg_catalog.min"),
266    (2145, "pg_catalog.min"),
267    (2147, "pg_catalog.count"),
268    (2148, "pg_catalog.variance"),
269    (2149, "pg_catalog.variance"),
270    (2150, "pg_catalog.variance"),
271    (2151, "pg_catalog.variance"),
272    (2152, "pg_catalog.variance"),
273    (2154, "pg_catalog.stddev"),
274    (2155, "pg_catalog.stddev"),
275    (2156, "pg_catalog.stddev"),
276    (2157, "pg_catalog.stddev"),
277    (2158, "pg_catalog.stddev"),
278    (2167, "pg_catalog.ceiling"),
279    (2169, "pg_catalog.power"),
280    (2171, "pg_cancel_backend"),
281    (2176, "array_length"),
282    (2218, "regclassin"),
283    (2220, "regtypein"),
284    (2244, "pg_catalog.max"),
285    (2245, "pg_catalog.min"),
286    (2250, "pg_catalog.has_database_privilege"),
287    (2251, "pg_catalog.has_database_privilege"),
288    (2252, "pg_catalog.has_database_privilege"),
289    (2253, "pg_catalog.has_database_privilege"),
290    (2254, "pg_catalog.has_database_privilege"),
291    (2255, "pg_catalog.has_database_privilege"),
292    (2268, "pg_catalog.has_schema_privilege"),
293    (2269, "pg_catalog.has_schema_privilege"),
294    (2270, "pg_catalog.has_schema_privilege"),
295    (2271, "pg_catalog.has_schema_privilege"),
296    (2272, "pg_catalog.has_schema_privilege"),
297    (2273, "pg_catalog.has_schema_privilege"),
298    (2284, "pg_catalog.regexp_replace"),
299    (2285, "pg_catalog.regexp_replace"),
300    (2290, "record_in"),
301    (2294, "any_in"),
302    (2296, "anyarray_in"),
303    (2304, "internal_in"),
304    (2308, "pg_catalog.ceil"),
305    (2309, "pg_catalog.floor"),
306    (2311, "pg_catalog.md5"),
307    (2312, "anyelement_in"),
308    (2320, "pg_catalog.ceiling"),
309    (2321, "pg_catalog.md5"),
310    (2325, "pg_catalog.pg_relation_size"),
311    (2331, "mz_catalog.unnest"),
312    (2332, "pg_catalog.pg_relation_size"),
313    (2335, "pg_catalog.array_agg"),
314    (2400, "array_recv"),
315    (2402, "record_recv"),
316    (2404, "int2recv"),
317    (2406, "int4recv"),
318    (2408, "int8recv"),
319    (2410, "int2vectorrecv"),
320    (2412, "bytearecv"),
321    (2414, "textrecv"),
322    (2418, "oidrecv"),
323    (2422, "namerecv"),
324    (2424, "float4recv"),
325    (2426, "float8recv"),
326    (2430, "bpcharrecv"),
327    (2432, "varcharrecv"),
328    (2434, "charrecv"),
329    (2436, "boolrecv"),
330    (2444, "regprocrecv"),
331    (2452, "regclassrecv"),
332    (2454, "regtyperecv"),
333    (2460, "numeric_recv"),
334    (2462, "sinh"),
335    (2463, "cosh"),
336    (2464, "tanh"),
337    (2465, "asinh"),
338    (2466, "acosh"),
339    (2467, "atanh"),
340    (2468, "date_recv"),
341    (2470, "time_recv"),
342    (2474, "timestamp_recv"),
343    (2476, "timestamptz_recv"),
344    (2478, "interval_recv"),
345    (2502, "anyarray_recv"),
346    (2504, "pg_catalog.pg_get_ruledef"),
347    (2505, "pg_catalog.pg_get_viewdef"),
348    (2506, "pg_catalog.pg_get_viewdef"),
349    (2507, "pg_catalog.pg_get_indexdef"),
350    (2508, "pg_catalog.pg_get_constraintdef"),
351    (2509, "pg_catalog.pg_get_expr"),
352    (2517, "bool_and"),
353    (2518, "bool_or"),
354    (2560, "pg_postmaster_start_time"),
355    (2641, "pg_catalog.var_samp"),
356    (2642, "pg_catalog.var_samp"),
357    (2643, "pg_catalog.var_samp"),
358    (2644, "pg_catalog.var_samp"),
359    (2645, "pg_catalog.var_samp"),
360    (2705, "pg_catalog.pg_has_role"),
361    (2706, "pg_catalog.pg_has_role"),
362    (2707, "pg_catalog.pg_has_role"),
363    (2708, "pg_catalog.pg_has_role"),
364    (2709, "pg_catalog.pg_has_role"),
365    (2710, "pg_catalog.pg_has_role"),
366    (2711, "justify_interval"),
367    (2712, "pg_catalog.stddev_samp"),
368    (2713, "pg_catalog.stddev_samp"),
369    (2714, "pg_catalog.stddev_samp"),
370    (2715, "pg_catalog.stddev_samp"),
371    (2716, "pg_catalog.stddev_samp"),
372    (2718, "pg_catalog.var_pop"),
373    (2719, "pg_catalog.var_pop"),
374    (2720, "pg_catalog.var_pop"),
375    (2721, "pg_catalog.var_pop"),
376    (2722, "pg_catalog.var_pop"),
377    (2724, "pg_catalog.stddev_pop"),
378    (2725, "pg_catalog.stddev_pop"),
379    (2726, "pg_catalog.stddev_pop"),
380    (2727, "pg_catalog.stddev_pop"),
381    (2728, "pg_catalog.stddev_pop"),
382    (2763, "pg_catalog.regexp_matches"),
383    (2764, "pg_catalog.regexp_matches"),
384    (2765, "pg_catalog.regexp_split_to_table"),
385    (2766, "pg_catalog.regexp_split_to_table"),
386    (2767, "pg_catalog.regexp_split_to_array"),
387    (2768, "pg_catalog.regexp_split_to_array"),
388    (2777, "anynonarray_in"),
389    (2803, "pg_catalog.count"),
390    (2952, "uuid_in"),
391    (2961, "uuid_recv"),
392    (3058, "concat"),
393    (3059, "concat_ws"),
394    (3060, "left"),
395    (3061, "right"),
396    (3062, "reverse"),
397    (3100, "row_number"),
398    (3101, "rank"),
399    (3102, "dense_rank"),
400    (3106, "pg_catalog.lag"),
401    (3107, "pg_catalog.lag"),
402    (3108, "pg_catalog.lag"),
403    (3109, "pg_catalog.lead"),
404    (3110, "pg_catalog.lead"),
405    (3111, "pg_catalog.lead"),
406    (3112, "first_value"),
407    (3113, "last_value"),
408    (3138, "mz_catalog.has_type_privilege"),
409    (3139, "mz_catalog.has_type_privilege"),
410    (3140, "mz_catalog.has_type_privilege"),
411    (3141, "mz_catalog.has_type_privilege"),
412    (3142, "mz_catalog.has_type_privilege"),
413    (3143, "mz_catalog.has_type_privilege"),
414    (3159, "pg_catalog.pg_get_viewdef"),
415    (3166, "pg_size_pretty"),
416    (3167, "array_remove"),
417    (3207, "jsonb_array_length"),
418    (3208, "jsonb_each"),
419    (3210, "jsonb_typeof"),
420    (3219, "jsonb_array_elements"),
421    (3262, "jsonb_strip_nulls"),
422    (3267, "jsonb_agg"),
423    (3270, "jsonb_object_agg"),
424    (3271, "pg_catalog.jsonb_build_array"),
425    (3272, "pg_catalog.jsonb_build_array"),
426    (3273, "pg_catalog.jsonb_build_object"),
427    (3274, "pg_catalog.jsonb_build_object"),
428    (3277, "pg_catalog.array_position"),
429    (3278, "pg_catalog.array_position"),
430    (3294, "pg_catalog.current_setting"),
431    (3306, "jsonb_pretty"),
432    (3396, "pg_catalog.regexp_match"),
433    (3397, "pg_catalog.regexp_match"),
434    (3419, "sha224"),
435    (3420, "sha256"),
436    (3421, "sha384"),
437    (3422, "sha512"),
438    (3461, "make_timestamp"),
439    (3465, "jsonb_array_elements_text"),
440    (3538, "pg_catalog.string_agg"),
441    (3545, "pg_catalog.string_agg"),
442    (3696, "starts_with"),
443    (3778, "pg_tablespace_location"),
444    (3787, "to_jsonb"),
445    (3805, "jsonb_recv"),
446    (3806, "jsonb_in"),
447    (3810, "pg_is_in_recovery"),
448    (3832, "anyrange_in"),
449    (3834, "range_in"),
450    (3836, "range_recv"),
451    (3840, "pg_catalog.int4range"),
452    (3841, "pg_catalog.int4range"),
453    (3844, "pg_catalog.numrange"),
454    (3845, "pg_catalog.numrange"),
455    (3848, "pg_catalog.lower"),
456    (3849, "pg_catalog.upper"),
457    (3850, "isempty"),
458    (3851, "lower_inc"),
459    (3852, "upper_inc"),
460    (3853, "lower_inf"),
461    (3854, "upper_inf"),
462    (3931, "jsonb_object_keys"),
463    (3932, "jsonb_each_text"),
464    (3933, "pg_catalog.tsrange"),
465    (3934, "pg_catalog.tsrange"),
466    (3937, "pg_catalog.tstzrange"),
467    (3938, "pg_catalog.tstzrange"),
468    (3941, "pg_catalog.daterange"),
469    (3942, "pg_catalog.daterange"),
470    (3945, "pg_catalog.int8range"),
471    (3946, "pg_catalog.int8range"),
472    (4053, "pg_catalog.array_agg"),
473    (4350, "normalize"),
474    (5086, "anycompatible_in"),
475    (5088, "anycompatiblearray_in"),
476    (5090, "anycompatiblearray_recv"),
477    (5092, "anycompatiblenonarray_in"),
478    (5094, "anycompatiblerange_in"),
479    (6163, "bit_count"),
480    (6177, "pg_catalog.date_bin"),
481    (6178, "pg_catalog.date_bin"),
482    (6199, "pg_catalog.extract"),
483    (6200, "pg_catalog.extract"),
484    (6202, "pg_catalog.extract"),
485    (6203, "pg_catalog.extract"),
486    (6204, "pg_catalog.extract"),
487    (12000, "information_schema._pg_expandarray"),
488    (12001, "pg_catalog.digest"),
489    (12002, "pg_catalog.digest"),
490    (12003, "pg_catalog.hmac"),
491    (12004, "pg_catalog.hmac"),
492    (16386, "pg_catalog.ceil"),
493    (16387, "concat_agg"),
494    (16388, "csv_extract"),
495    (16389, "current_timestamp"),
496    (16390, "pg_catalog.floor"),
497    (16392, "list_append"),
498    (16393, "list_cat"),
499    (16394, "list_length_max"),
500    (16395, "list_length"),
501    (16396, "list_n_layers"),
502    (16397, "list_prepend"),
503    (16398, "pg_catalog.max"),
504    (16399, "pg_catalog.min"),
505    (16400, "mz_unsafe.mz_all"),
506    (16401, "mz_unsafe.mz_any"),
507    (16403, "mz_unsafe.mz_avg_promotion_internal_v1"),
508    (16404, "mz_unsafe.mz_avg_promotion_internal_v1"),
509    (16405, "mz_unsafe.mz_avg_promotion_internal_v1"),
510    (16407, "mz_environment_id"),
511    (16409, "mz_logical_timestamp"),
512    (16410, "mz_internal.mz_render_typmod"),
513    (16411, "mz_version"),
514    (16412, "regexp_extract"),
515    (16413, "repeat_row"),
516    (16414, "pg_catalog.round"),
517    (16416, "mz_catalog.unnest"),
518    (16434, "mz_unsafe.mz_sleep"),
519    (16435, "mz_internal.mz_session_id"),
520    (16436, "mz_uptime"),
521    (16440, "mz_row_size"),
522    (16441, "pg_catalog.max"),
523    (16442, "pg_catalog.min"),
524    (16443, "mz_unsafe.mz_avg_promotion_internal_v1"),
525    (16444, "list_agg"),
526    (16445, "mz_unsafe.mz_error_if_null"),
527    (16446, "pg_catalog.date_bin"),
528    (16447, "pg_catalog.date_bin"),
529    (16448, "list_remove"),
530    (16449, "pg_catalog.date_bin_hopping"),
531    (16450, "pg_catalog.date_bin_hopping"),
532    (16451, "pg_catalog.date_bin_hopping"),
533    (16452, "pg_catalog.date_bin_hopping"),
534    (16453, "mz_internal.mz_type_name"),
535    (16456, "map_length"),
536    (16457, "mz_unsafe.mz_panic"),
537    (16458, "mz_version_num"),
538    (16459, "pg_catalog.trunc"),
539    (16496, "pg_catalog.max"),
540    (16497, "pg_catalog.max"),
541    (16498, "pg_catalog.max"),
542    (16499, "pg_catalog.min"),
543    (16500, "pg_catalog.min"),
544    (16501, "pg_catalog.min"),
545    (16502, "pg_catalog.sum"),
546    (16503, "pg_catalog.sum"),
547    (16504, "pg_catalog.sum"),
548    (16505, "pg_catalog.avg"),
549    (16506, "pg_catalog.avg"),
550    (16507, "pg_catalog.avg"),
551    (16508, "pg_catalog.mod"),
552    (16509, "pg_catalog.mod"),
553    (16510, "pg_catalog.mod"),
554    (16511, "pg_catalog.stddev"),
555    (16512, "pg_catalog.stddev"),
556    (16513, "pg_catalog.stddev"),
557    (16514, "pg_catalog.stddev_pop"),
558    (16515, "pg_catalog.stddev_pop"),
559    (16516, "pg_catalog.stddev_pop"),
560    (16517, "pg_catalog.stddev_samp"),
561    (16518, "pg_catalog.stddev_samp"),
562    (16519, "pg_catalog.stddev_samp"),
563    (16520, "pg_catalog.variance"),
564    (16521, "pg_catalog.variance"),
565    (16522, "pg_catalog.variance"),
566    (16523, "pg_catalog.var_pop"),
567    (16524, "pg_catalog.var_pop"),
568    (16525, "pg_catalog.var_pop"),
569    (16526, "pg_catalog.var_samp"),
570    (16527, "pg_catalog.var_samp"),
571    (16528, "pg_catalog.var_samp"),
572    (16550, "mz_unsafe.mz_avg_promotion_internal_v1"),
573    (16551, "mz_unsafe.mz_avg_promotion_internal_v1"),
574    (16560, "mz_now"),
575    (16561, "pg_catalog.max"),
576    (16562, "pg_catalog.min"),
577    (16563, "pg_catalog.date"),
578    (16564, "pg_catalog.ceiling"),
579    (16565, "uuid_generate_v5"),
580    (16570, "mz_internal.make_mz_aclitem"),
581    (16571, "mz_internal.mz_aclitem_grantor"),
582    (16572, "mz_internal.mz_aclitem_grantee"),
583    (16573, "mz_internal.mz_aclitem_privileges"),
584    (16574, "mz_internal.is_rbac_enabled"),
585    (16575, "mz_internal.mz_acl_item_contains_privilege"),
586    (16576, "mz_internal.mz_validate_privileges"),
587    (16577, "mz_internal.mz_role_oid"),
588    (16578, "mz_internal.mz_minimal_name_qualification"),
589    (16581, "mz_internal.mz_resolve_object_name"),
590    (16582, "mz_internal.mz_global_id_to_name"),
591    (16584, "pg_catalog.parse_ident"),
592    (16585, "mz_internal.mz_database_oid"),
593    (16586, "mz_internal.mz_schema_oid"),
594    (16587, "mz_catalog.has_cluster_privilege"),
595    (16588, "mz_catalog.has_cluster_privilege"),
596    (16589, "mz_catalog.has_cluster_privilege"),
597    (16591, "mz_catalog.has_connection_privilege"),
598    (16592, "mz_catalog.has_connection_privilege"),
599    (16593, "mz_catalog.has_connection_privilege"),
600    (16594, "mz_catalog.has_connection_privilege"),
601    (16595, "mz_catalog.has_connection_privilege"),
602    (16596, "mz_catalog.has_connection_privilege"),
603    (16597, "mz_catalog.has_secret_privilege"),
604    (16598, "mz_catalog.has_secret_privilege"),
605    (16599, "mz_catalog.has_secret_privilege"),
606    (16600, "mz_catalog.has_secret_privilege"),
607    (16601, "mz_catalog.has_secret_privilege"),
608    (16602, "mz_catalog.has_secret_privilege"),
609    (16603, "mz_internal.mz_normalize_object_name"),
610    (16604, "mz_catalog.datediff"),
611    (16605, "mz_catalog.datediff"),
612    (16606, "mz_catalog.datediff"),
613    (16607, "mz_catalog.datediff"),
614    (16608, "mz_catalog.has_system_privilege"),
615    (16609, "mz_catalog.has_system_privilege"),
616    (16610, "mz_catalog.has_system_privilege"),
617    (16611, "try_parse_monotonic_iso8601_timestamp"),
618    (16612, "mz_internal.mz_role_oid_memberships"),
619    (16613, "mz_internal.mz_validate_role_privilege"),
620    (16614, "mz_is_superuser"),
621    (16615, "mz_internal.mz_format_privileges"),
622    (16616, "mz_internal.aclitem_grantor"),
623    (16617, "mz_internal.aclitem_grantee"),
624    (16618, "mz_internal.aclitem_privileges"),
625    (16619, "mz_internal.mz_aclexplode"),
626    (16620, "mz_catalog.has_role"),
627    (16621, "mz_catalog.has_role"),
628    (16622, "mz_catalog.has_role"),
629    (16623, "mz_catalog.has_role"),
630    (16624, "mz_catalog.has_role"),
631    (16625, "mz_catalog.has_role"),
632    (16626, "mz_unsafe.mz_avg_promotion"),
633    (16627, "mz_unsafe.mz_avg_promotion"),
634    (16628, "mz_unsafe.mz_avg_promotion"),
635    (16629, "mz_unsafe.mz_avg_promotion"),
636    (16630, "mz_unsafe.mz_avg_promotion"),
637    (16631, "mz_unsafe.mz_avg_promotion"),
638    (16632, "mz_unsafe.mz_avg_promotion"),
639    (16633, "mz_unsafe.mz_avg_promotion"),
640    (16634, "mz_unsafe.mz_avg_promotion"),
641    (16635, "mz_catalog.avg_internal_v1"),
642    (16636, "mz_catalog.avg_internal_v1"),
643    (16637, "mz_catalog.avg_internal_v1"),
644    (16638, "mz_catalog.avg_internal_v1"),
645    (16639, "mz_catalog.avg_internal_v1"),
646    (16640, "mz_catalog.avg_internal_v1"),
647    (16641, "mz_catalog.avg_internal_v1"),
648    (16642, "mz_catalog.avg_internal_v1"),
649    (16643, "mz_catalog.avg_internal_v1"),
650    (16644, "mz_catalog.constant_time_eq"),
651    (16645, "mz_catalog.constant_time_eq"),
652    (16646, "timezone_offset"),
653    (16647, "mz_catalog.pretty_sql"),
654    (16648, "mz_catalog.pretty_sql"),
655    (16649, "mz_internal.mz_name_rank"),
656    (16650, "mz_internal.mz_connection_oid"),
657    (16651, "mz_internal.mz_secret_oid"),
658    (16652, "map_build"),
659    (16653, "map_agg"),
660    (16654, "mz_catalog.unnest"),
661    (16655, "mz_internal.mz_normalize_schema_name"),
662    (16957, "current_catalog"),
663    (16958, "current_role"),
664    (16959, "user"),
665    (16987, "mz_catalog.crc32"),
666    (16988, "mz_catalog.crc32"),
667    (16989, "mz_catalog.kafka_murmur2"),
668    (16990, "mz_catalog.kafka_murmur2"),
669    (16991, "mz_catalog.seahash"),
670    (16992, "mz_catalog.seahash"),
671    (17069, "mz_internal.parse_catalog_id"),
672    (17070, "mz_internal.parse_catalog_privileges"),
673    (17073, "mz_internal.parse_catalog_create_sql"),
674    (17074, "mz_internal.redact_sql"),
675    (17075, "repeat_row_non_negative"),
676    (17086, "mz_internal.mz_session_role_memberships"),
677    (17090, "mz_internal.parse_catalog_acl_mode"),
678    (17093, "mz_unsafe.generate_series_unoptimized"),
679    (17094, "mz_unsafe.generate_series_unoptimized"),
680    (17100, "mz_internal.parse_catalog_audit_log_details"),
681    (17105, "mz_internal.parse_postgres_source_details"),
682    (17106, "mz_internal.parse_kafka_source_details"),
683    (17111, "mz_internal.parse_source_export_details"),
684    (17112, "mz_internal.parse_connection_details"),
685    (17113, "mz_aws_account_id"),
686    (17114, "mz_aws_external_id_prefix"),
687    (17115, "mz_aws_connection_role_arn"),
688    (17125, "mz_internal.parse_catalog_item_references"),
689    // END GENERATED
690];
691
692/// Returns the text that `regproc` OID `oid` renders as, or `None` when no
693/// builtin function has that OID.
694///
695/// PostgreSQL renders an unmatched OID in decimal and OID 0 as `-`. Neither is
696/// in [`NAMES`], so callers handle both.
697pub fn name(oid: u32) -> Option<&'static str> {
698    NAMES
699        .binary_search_by_key(&oid, |(entry_oid, _)| *entry_oid)
700        .ok()
701        .map(|i| NAMES[i].1)
702}
703
704/// Returns the OID whose [`NAMES`] rendering is `name`.
705///
706/// `Err` distinguishes no match from an ambiguous one. A rendering is ambiguous
707/// when several overloads share it, in which case PostgreSQL's `regprocin`
708/// likewise refuses to resolve it. The scan is linear because reads of this
709/// direction only happen while decoding text-format input, which is rare
710/// compared to encoding.
711pub fn oid(name: &str) -> Result<u32, NameLookupError> {
712    let mut found = None;
713    for (entry_oid, entry_name) in NAMES {
714        if *entry_name == name {
715            if found.is_some() {
716                return Err(NameLookupError::Ambiguous);
717            }
718            found = Some(*entry_oid);
719        }
720    }
721    found.ok_or(NameLookupError::NotFound)
722}
723
724/// Why [`oid`] could not resolve a name.
725#[derive(Debug, Clone, Copy, PartialEq, Eq)]
726pub enum NameLookupError {
727    /// No builtin function renders as the given name.
728    NotFound,
729    /// Several builtin functions render as the given name.
730    Ambiguous,
731}