summaryrefslogtreecommitdiff
path: root/src/include/catalog/pg_proc.dat
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-05-12 15:35:15 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-05-12 15:35:15 -0400
commitc2f436151edc818601c2499e400e1ad53d0da66f (patch)
tree483375e5b1c07d1856c3f72e8dd5b781a21daf10 /src/include/catalog/pg_proc.dat
parent03501aceae5d27bf5a23942035299d52600e3279 (diff)
downloadpostgresql-c2f436151edc818601c2499e400e1ad53d0da66f.tar.gz
Do pre-release housekeeping on catalog data.
Run renumber_oids.pl to move high-numbered OIDs down, as per pre-beta tasks specified by RELEASE_CHANGES. For reference, the command was ./renumber_oids.pl --first-mapped-oid 8000 --target-oid 6205
Diffstat (limited to 'src/include/catalog/pg_proc.dat')
-rw-r--r--src/include/catalog/pg_proc.dat116
1 files changed, 58 insertions, 58 deletions
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index c1bc1c3cce..babe16f00a 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -170,7 +170,7 @@
proname => 'starts_with', prosupport => 'text_starts_with_support',
proleakproof => 't', prorettype => 'bool', proargtypes => 'text text',
prosrc => 'text_starts_with' },
-{ oid => '8923', descr => 'planner support for text_starts_with',
+{ oid => '6242', descr => 'planner support for text_starts_with',
proname => 'text_starts_with_support', prorettype => 'internal',
proargtypes => 'internal', prosrc => 'text_starts_with_support' },
{ oid => '68',
@@ -3287,7 +3287,7 @@
proname => 'pg_nextoid', provolatile => 'v', proparallel => 'u',
prorettype => 'oid', proargtypes => 'regclass name regclass',
prosrc => 'pg_nextoid' },
-{ oid => '8922', descr => 'stop making pinned objects during initdb',
+{ oid => '6241', descr => 'stop making pinned objects during initdb',
proname => 'pg_stop_making_pinned_objects', provolatile => 'v',
proparallel => 'u', prorettype => 'void', proargtypes => '',
prosrc => 'pg_stop_making_pinned_objects' },
@@ -3557,15 +3557,15 @@
{ oid => '2285', descr => 'replace text using regexp',
proname => 'regexp_replace', prorettype => 'text',
proargtypes => 'text text text text', prosrc => 'textregexreplace' },
-{ oid => '9611', descr => 'replace text using regexp',
+{ oid => '6251', descr => 'replace text using regexp',
proname => 'regexp_replace', prorettype => 'text',
proargtypes => 'text text text int4 int4 text',
prosrc => 'textregexreplace_extended' },
-{ oid => '9612', descr => 'replace text using regexp',
+{ oid => '6252', descr => 'replace text using regexp',
proname => 'regexp_replace', prorettype => 'text',
proargtypes => 'text text text int4 int4',
prosrc => 'textregexreplace_extended_no_flags' },
-{ oid => '9613', descr => 'replace text using regexp',
+{ oid => '6253', descr => 'replace text using regexp',
proname => 'regexp_replace', prorettype => 'text',
proargtypes => 'text text text int4',
prosrc => 'textregexreplace_extended_no_n' },
@@ -3583,56 +3583,56 @@
proname => 'regexp_matches', prorows => '10', proretset => 't',
prorettype => '_text', proargtypes => 'text text text',
prosrc => 'regexp_matches' },
-{ oid => '9614', descr => 'count regexp matches',
+{ oid => '6254', descr => 'count regexp matches',
proname => 'regexp_count', prorettype => 'int4', proargtypes => 'text text',
prosrc => 'regexp_count_no_start' },
-{ oid => '9615', descr => 'count regexp matches',
+{ oid => '6255', descr => 'count regexp matches',
proname => 'regexp_count', prorettype => 'int4',
proargtypes => 'text text int4', prosrc => 'regexp_count_no_flags' },
-{ oid => '9616', descr => 'count regexp matches',
+{ oid => '6256', descr => 'count regexp matches',
proname => 'regexp_count', prorettype => 'int4',
proargtypes => 'text text int4 text', prosrc => 'regexp_count' },
-{ oid => '9617', descr => 'position of regexp match',
+{ oid => '6257', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4', proargtypes => 'text text',
prosrc => 'regexp_instr_no_start' },
-{ oid => '9618', descr => 'position of regexp match',
+{ oid => '6258', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4',
proargtypes => 'text text int4', prosrc => 'regexp_instr_no_n' },
-{ oid => '9619', descr => 'position of regexp match',
+{ oid => '6259', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4',
proargtypes => 'text text int4 int4', prosrc => 'regexp_instr_no_endoption' },
-{ oid => '9620', descr => 'position of regexp match',
+{ oid => '6260', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4',
proargtypes => 'text text int4 int4 int4',
prosrc => 'regexp_instr_no_flags' },
-{ oid => '9621', descr => 'position of regexp match',
+{ oid => '6261', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4',
proargtypes => 'text text int4 int4 int4 text',
prosrc => 'regexp_instr_no_subexpr' },
-{ oid => '9622', descr => 'position of regexp match',
+{ oid => '6262', descr => 'position of regexp match',
proname => 'regexp_instr', prorettype => 'int4',
proargtypes => 'text text int4 int4 int4 text int4',
prosrc => 'regexp_instr' },
-{ oid => '9623', descr => 'test for regexp match',
+{ oid => '6263', descr => 'test for regexp match',
proname => 'regexp_like', prorettype => 'bool', proargtypes => 'text text',
prosrc => 'regexp_like_no_flags' },
-{ oid => '9624', descr => 'test for regexp match',
+{ oid => '6264', descr => 'test for regexp match',
proname => 'regexp_like', prorettype => 'bool',
proargtypes => 'text text text', prosrc => 'regexp_like' },
-{ oid => '9625', descr => 'extract substring that matches regexp',
+{ oid => '6265', descr => 'extract substring that matches regexp',
proname => 'regexp_substr', prorettype => 'text', proargtypes => 'text text',
prosrc => 'regexp_substr_no_start' },
-{ oid => '9626', descr => 'extract substring that matches regexp',
+{ oid => '6266', descr => 'extract substring that matches regexp',
proname => 'regexp_substr', prorettype => 'text',
proargtypes => 'text text int4', prosrc => 'regexp_substr_no_n' },
-{ oid => '9627', descr => 'extract substring that matches regexp',
+{ oid => '6267', descr => 'extract substring that matches regexp',
proname => 'regexp_substr', prorettype => 'text',
proargtypes => 'text text int4 int4', prosrc => 'regexp_substr_no_flags' },
-{ oid => '9628', descr => 'extract substring that matches regexp',
+{ oid => '6268', descr => 'extract substring that matches regexp',
proname => 'regexp_substr', prorettype => 'text',
proargtypes => 'text text int4 int4 text',
prosrc => 'regexp_substr_no_subexpr' },
-{ oid => '9629', descr => 'extract substring that matches regexp',
+{ oid => '6269', descr => 'extract substring that matches regexp',
proname => 'regexp_substr', prorettype => 'text',
proargtypes => 'text text int4 int4 text int4', prosrc => 'regexp_substr' },
{ oid => '2088', descr => 'split string by field_sep and return field_num',
@@ -5377,12 +5377,12 @@
proargnames => '{slot_name,slot_name,spill_txns,spill_count,spill_bytes,stream_txns,stream_count,stream_bytes,total_txns,total_bytes,stats_reset}',
prosrc => 'pg_stat_get_replication_slot' },
-{ oid => '8384', descr => 'statistics: check if a stats object exists',
+{ oid => '6230', descr => 'statistics: check if a stats object exists',
proname => 'pg_stat_have_stats', provolatile => 'v', proparallel => 'r',
prorettype => 'bool', proargtypes => 'text oid oid',
prosrc => 'pg_stat_have_stats' },
-{ oid => '8523', descr => 'statistics: information about subscription stats',
+{ oid => '6231', descr => 'statistics: information about subscription stats',
proname => 'pg_stat_get_subscription_stats', provolatile => 's',
proparallel => 'r', prorettype => 'record', proargtypes => 'oid',
proallargtypes => '{oid,oid,int8,int8,timestamptz}',
@@ -5653,7 +5653,7 @@
proargmodes => '{o,o,o,o,o,o,o,o,o}',
proargnames => '{wal_records,wal_fpi,wal_bytes,wal_buffers_full,wal_write,wal_sync,wal_write_time,wal_sync_time,stats_reset}',
prosrc => 'pg_stat_get_wal' },
-{ oid => '9085', descr => 'statistics: information about WAL prefetching',
+{ oid => '6248', descr => 'statistics: information about WAL prefetching',
proname => 'pg_stat_get_recovery_prefetch', prorows => '1', proretset => 't',
provolatile => 'v', prorettype => 'record', proargtypes => '',
proallargtypes => '{timestamptz,int8,int8,int8,int8,int8,int8,int4,int4,int4}',
@@ -5788,7 +5788,7 @@
proname => 'pg_stat_reset_replication_slot', proisstrict => 'f',
provolatile => 'v', prorettype => 'void', proargtypes => 'text',
prosrc => 'pg_stat_reset_replication_slot' },
-{ oid => '8524',
+{ oid => '6232',
descr => 'statistics: reset collected statistics for a single subscription',
proname => 'pg_stat_reset_subscription_stats', proisstrict => 'f',
provolatile => 'v', prorettype => 'void', proargtypes => 'oid',
@@ -6114,7 +6114,7 @@
proargnames => '{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart}',
prosrc => 'show_all_settings' },
-{ oid => '8921', descr => 'return flags for specified GUC',
+{ oid => '6240', descr => 'return flags for specified GUC',
proname => 'pg_settings_get_flags', provolatile => 's', prorettype => '_text',
proargtypes => 'text', prosrc => 'pg_settings_get_flags' },
@@ -6132,7 +6132,7 @@
proargmodes => '{o,o,o,o,o,o,o,o,o}',
proargnames => '{line_number,type,database,user_name,address,netmask,auth_method,options,error}',
prosrc => 'pg_hba_file_rules' },
-{ oid => '9556', descr => 'show pg_ident.conf mappings',
+{ oid => '6250', descr => 'show pg_ident.conf mappings',
proname => 'pg_ident_file_mappings', prorows => '1000', proretset => 't',
provolatile => 'v', prorettype => 'record', proargtypes => '',
proallargtypes => '{int4,text,text,text,text}', proargmodes => '{o,o,o,o,o}',
@@ -6372,7 +6372,7 @@
prorettype => 'text', proargtypes => '',
prosrc => 'pg_get_wal_replay_pause_state' },
-{ oid => '8189', descr => 'get resource managers loaded in system',
+{ oid => '6224', descr => 'get resource managers loaded in system',
proname => 'pg_get_wal_resource_managers', prorows => '50', proretset => 't',
provolatile => 'v', prorettype => 'record', proargtypes => '',
proallargtypes => '{int4,text,bool}', proargmodes => '{o,o,o}',
@@ -6667,7 +6667,7 @@
proname => 'count', prosupport => 'int8inc_support', prokind => 'a',
proisstrict => 'f', prorettype => 'int8', proargtypes => '',
prosrc => 'aggregate_dummy' },
-{ oid => '8802', descr => 'planner support for count run condition',
+{ oid => '6236', descr => 'planner support for count run condition',
proname => 'int8inc_support', prorettype => 'internal',
proargtypes => 'internal', prosrc => 'int8inc_support' },
@@ -7231,17 +7231,17 @@
proname => 'has_type_privilege', provolatile => 's', prorettype => 'bool',
proargtypes => 'oid text', prosrc => 'has_type_privilege_id' },
-{ oid => '8050',
+{ oid => '6205',
descr => 'user privilege on parameter by username, parameter name',
proname => 'has_parameter_privilege', provolatile => 's',
prorettype => 'bool', proargtypes => 'name text text',
prosrc => 'has_parameter_privilege_name_name' },
-{ oid => '8051',
+{ oid => '6206',
descr => 'user privilege on parameter by user oid, parameter name',
proname => 'has_parameter_privilege', provolatile => 's',
prorettype => 'bool', proargtypes => 'oid text text',
prosrc => 'has_parameter_privilege_id_name' },
-{ oid => '8052',
+{ oid => '6207',
descr => 'current user privilege on parameter by parameter name',
proname => 'has_parameter_privilege', provolatile => 's',
prorettype => 'bool', proargtypes => 'text text',
@@ -8777,7 +8777,7 @@
proname => 'json_agg_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal anyelement',
prosrc => 'json_agg_transfn' },
-{ oid => '8173', descr => 'json aggregate transition function',
+{ oid => '6208', descr => 'json aggregate transition function',
proname => 'json_agg_strict_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal anyelement',
prosrc => 'json_agg_strict_transfn' },
@@ -8788,7 +8788,7 @@
proname => 'json_agg', prokind => 'a', proisstrict => 'f', provolatile => 's',
prorettype => 'json', proargtypes => 'anyelement',
prosrc => 'aggregate_dummy' },
-{ oid => '8174', descr => 'aggregate input into json',
+{ oid => '6209', descr => 'aggregate input into json',
proname => 'json_agg_strict', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'json', proargtypes => 'anyelement',
prosrc => 'aggregate_dummy' },
@@ -8796,17 +8796,17 @@
proname => 'json_object_agg_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal any any',
prosrc => 'json_object_agg_transfn' },
-{ oid => '8175', descr => 'json object aggregate transition function',
+{ oid => '6210', descr => 'json object aggregate transition function',
proname => 'json_object_agg_strict_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
prosrc => 'json_object_agg_strict_transfn' },
-{ oid => '8176', descr => 'json object aggregate transition function',
+{ oid => '6211', descr => 'json object aggregate transition function',
proname => 'json_object_agg_unique_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
prosrc => 'json_object_agg_unique_transfn' },
-{ oid => '8177', descr => 'json object aggregate transition function',
+{ oid => '6212', descr => 'json object aggregate transition function',
proname => 'json_object_agg_unique_strict_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
@@ -8819,16 +8819,16 @@
proname => 'json_object_agg', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'json', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8178', descr => 'aggregate non-NULL input into a json object',
+{ oid => '6213', descr => 'aggregate non-NULL input into a json object',
proname => 'json_object_agg_strict', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'json', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8179',
+{ oid => '6214',
descr => 'aggregate input into a json object with unique keys',
proname => 'json_object_agg_unique', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'json', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8180',
+{ oid => '6215',
descr => 'aggregate non-NULL input into a json object with unique keys',
proname => 'json_object_agg_unique_strict', prokind => 'a',
proisstrict => 'f', provolatile => 's', prorettype => 'json',
@@ -9705,7 +9705,7 @@
proname => 'jsonb_agg_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal anyelement',
prosrc => 'jsonb_agg_transfn' },
-{ oid => '8181', descr => 'jsonb aggregate transition function',
+{ oid => '6216', descr => 'jsonb aggregate transition function',
proname => 'jsonb_agg_strict_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal anyelement',
prosrc => 'jsonb_agg_strict_transfn' },
@@ -9717,7 +9717,7 @@
proname => 'jsonb_agg', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'jsonb', proargtypes => 'anyelement',
prosrc => 'aggregate_dummy' },
-{ oid => '8182', descr => 'aggregate input into jsonb skipping nulls',
+{ oid => '6217', descr => 'aggregate input into jsonb skipping nulls',
proname => 'jsonb_agg_strict', prokind => 'a', proisstrict => 'f',
provolatile => 's', prorettype => 'jsonb', proargtypes => 'anyelement',
prosrc => 'aggregate_dummy' },
@@ -9725,17 +9725,17 @@
proname => 'jsonb_object_agg_transfn', proisstrict => 'f', provolatile => 's',
prorettype => 'internal', proargtypes => 'internal any any',
prosrc => 'jsonb_object_agg_transfn' },
-{ oid => '8183', descr => 'jsonb object aggregate transition function',
+{ oid => '6218', descr => 'jsonb object aggregate transition function',
proname => 'jsonb_object_agg_strict_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
prosrc => 'jsonb_object_agg_strict_transfn' },
-{ oid => '8184', descr => 'jsonb object aggregate transition function',
+{ oid => '6219', descr => 'jsonb object aggregate transition function',
proname => 'jsonb_object_agg_unique_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
prosrc => 'jsonb_object_agg_unique_transfn' },
-{ oid => '8185', descr => 'jsonb object aggregate transition function',
+{ oid => '6220', descr => 'jsonb object aggregate transition function',
proname => 'jsonb_object_agg_unique_strict_transfn', proisstrict => 'f',
provolatile => 's', prorettype => 'internal',
proargtypes => 'internal any any',
@@ -9748,16 +9748,16 @@
proname => 'jsonb_object_agg', prokind => 'a', proisstrict => 'f',
prorettype => 'jsonb', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8186', descr => 'aggregate non-NULL inputs into jsonb object',
+{ oid => '6221', descr => 'aggregate non-NULL inputs into jsonb object',
proname => 'jsonb_object_agg_strict', prokind => 'a', proisstrict => 'f',
prorettype => 'jsonb', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8187',
+{ oid => '6222',
descr => 'aggregate inputs into jsonb object checking key uniqueness',
proname => 'jsonb_object_agg_unique', prokind => 'a', proisstrict => 'f',
prorettype => 'jsonb', proargtypes => 'any any',
prosrc => 'aggregate_dummy' },
-{ oid => '8188',
+{ oid => '6223',
descr => 'aggregate non-NULL inputs into jsonb object checking key uniqueness',
proname => 'jsonb_object_agg_unique_strict', prokind => 'a',
proisstrict => 'f', prorettype => 'jsonb', proargtypes => 'any any',
@@ -10196,21 +10196,21 @@
proname => 'row_number', prosupport => 'window_row_number_support',
prokind => 'w', proisstrict => 'f', prorettype => 'int8', proargtypes => '',
prosrc => 'window_row_number' },
-{ oid => '8799', descr => 'planner support for row_number run condition',
+{ oid => '6233', descr => 'planner support for row_number run condition',
proname => 'window_row_number_support', prorettype => 'internal',
proargtypes => 'internal', prosrc => 'window_row_number_support' },
{ oid => '3101', descr => 'integer rank with gaps',
proname => 'rank', prosupport => 'window_rank_support', prokind => 'w',
proisstrict => 'f', prorettype => 'int8', proargtypes => '',
prosrc => 'window_rank' },
-{ oid => '8800', descr => 'planner support for rank run condition',
+{ oid => '6234', descr => 'planner support for rank run condition',
proname => 'window_rank_support', prorettype => 'internal',
proargtypes => 'internal', prosrc => 'window_rank_support' },
{ oid => '3102', descr => 'integer rank without gaps',
proname => 'dense_rank', prosupport => 'window_dense_rank_support',
prokind => 'w', proisstrict => 'f', prorettype => 'int8', proargtypes => '',
prosrc => 'window_dense_rank' },
-{ oid => '8801', descr => 'planner support for dense rank run condition',
+{ oid => '6235', descr => 'planner support for dense rank run condition',
proname => 'window_dense_rank_support', prorettype => 'internal',
proargtypes => 'internal', prosrc => 'window_dense_rank_support' },
{ oid => '3103', descr => 'fractional rank within partition',
@@ -10738,15 +10738,15 @@
proname => 'range_agg', prokind => 'a', proisstrict => 'f',
prorettype => 'anymultirange', proargtypes => 'anyrange',
prosrc => 'aggregate_dummy' },
-{ oid => '8205', descr => 'aggregate transition function',
+{ oid => '6225', descr => 'aggregate transition function',
proname => 'multirange_agg_transfn', proisstrict => 'f',
prorettype => 'internal', proargtypes => 'internal anymultirange',
prosrc => 'multirange_agg_transfn' },
-{ oid => '8206', descr => 'aggregate final function',
+{ oid => '6226', descr => 'aggregate final function',
proname => 'multirange_agg_finalfn', proisstrict => 'f',
prorettype => 'anymultirange', proargtypes => 'internal anymultirange',
prosrc => 'range_agg_finalfn' },
-{ oid => '8207', descr => 'combine aggregate input into a multirange',
+{ oid => '6227', descr => 'combine aggregate input into a multirange',
proname => 'range_agg', prokind => 'a', proisstrict => 'f',
prorettype => 'anymultirange', proargtypes => 'anymultirange',
prosrc => 'aggregate_dummy' },
@@ -11759,7 +11759,7 @@
proname => 'pg_collation_actual_version', procost => '100',
provolatile => 'v', prorettype => 'text', proargtypes => 'oid',
prosrc => 'pg_collation_actual_version' },
-{ oid => '9167',
+{ oid => '6249',
descr => 'get actual version of database collation from operating system',
proname => 'pg_database_collation_actual_version', procost => '100',
provolatile => 'v', prorettype => 'text', proargtypes => 'oid',
@@ -11793,21 +11793,21 @@
proallargtypes => '{oid,text,int8,timestamptz}', proargmodes => '{i,o,o,o}',
proargnames => '{tablespace,name,size,modification}',
prosrc => 'pg_ls_tmpdir_1arg' },
-{ oid => '9858',
+{ oid => '6270',
descr => 'list of files in the pg_logical/snapshots directory',
proname => 'pg_ls_logicalsnapdir', procost => '10', prorows => '20',
proretset => 't', provolatile => 'v', prorettype => 'record',
proargtypes => '', proallargtypes => '{text,int8,timestamptz}',
proargmodes => '{o,o,o}', proargnames => '{name,size,modification}',
prosrc => 'pg_ls_logicalsnapdir' },
-{ oid => '9859',
+{ oid => '6271',
descr => 'list of files in the pg_logical/mappings directory',
proname => 'pg_ls_logicalmapdir', procost => '10', prorows => '20',
proretset => 't', provolatile => 'v', prorettype => 'record',
proargtypes => '', proallargtypes => '{text,int8,timestamptz}',
proargmodes => '{o,o,o}', proargnames => '{name,size,modification}',
prosrc => 'pg_ls_logicalmapdir' },
-{ oid => '9860',
+{ oid => '6272',
descr => 'list of files in the pg_replslot/slot_name directory',
proname => 'pg_ls_replslotdir', procost => '10', prorows => '20',
proretset => 't', provolatile => 'v', prorettype => 'record',