Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0f085f6

Browse files
committed
Add proallargtypes and proargmodes columns to pg_proc, as per my earlier
proposal for OUT parameter support. The columns don't actually *do*anything yet, they are just left NULLs. But I thought I'd commit thispart separately as a fairly pure example of the tasks needed when addinga column to pg_proc or one of the other core system tables.
1 parenteb47ee4 commit0f085f6

File tree

8 files changed

+1774
-1716
lines changed

8 files changed

+1774
-1716
lines changed

‎doc/src/sgml/bki.sgml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.13 2005/01/05 23:42:03 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.14 2005/03/29 19:44:22 tgl Exp $
33
-->
44

55
<chapter id="bki">
@@ -97,6 +97,7 @@ $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.13 2005/01/05 23:42:03 tgl Exp $
9797
<type>oid</type>, <type>tid</type>, <type>xid</type>,
9898
<type>cid</type>, <type>int2vector</type>, <type>oidvector</type>,
9999
<type>_int4</type> (array), <type>_text</type> (array),
100+
<type>_oid</type> (array), <type>_char</type> (array),
100101
<type>_aclitem</type> (array). Although it is possible to create
101102
tables containing columns of other types, this cannot be done until
102103
after <structname>pg_type</> has been created and filled with

‎doc/src/sgml/catalogs.sgml

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!--
22
Documentation of the system catalogs, directed toward PostgreSQL developers
3-
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.98 2005/03/2900:16:49 tgl Exp $
3+
$PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.99 2005/03/2919:44:22 tgl Exp $
44
-->
55

66
<chapter id="catalogs">
@@ -2855,7 +2855,39 @@
28552855
<entry><structfield>proargtypes</structfield></entry>
28562856
<entry><type>oidvector</type></entry>
28572857
<entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
2858-
<entry>An array with the data types of the function arguments</entry>
2858+
<entry>
2859+
An array with the data types of the function arguments. This includes
2860+
only input arguments (including INOUT arguments), and thus represents
2861+
the call signature of the function.
2862+
</entry>
2863+
</row>
2864+
2865+
<row>
2866+
<entry><structfield>proallargtypes</structfield></entry>
2867+
<entry><type>oid[]</type></entry>
2868+
<entry><literal><link linkend="catalog-pg-type"><structname>pg_type</structname></link>.oid</literal></entry>
2869+
<entry>
2870+
An array with the data types of the function arguments. This includes
2871+
all arguments (including OUT and INOUT arguments); however, if all the
2872+
arguments are IN arguments, this field will be null.
2873+
Note that subscripting is 1-based, whereas for historical reasons
2874+
<structfield>proargtypes</> is subscripted from 0.
2875+
</entry>
2876+
</row>
2877+
2878+
<row>
2879+
<entry><structfield>proargmodes</structfield></entry>
2880+
<entry><type>"char"[]</type></entry>
2881+
<entry></entry>
2882+
<entry>
2883+
An array with the modes of the function arguments, encoded as
2884+
<literal>i</literal> for IN arguments,
2885+
<literal>o</literal> for OUT arguments,
2886+
<literal>b</literal> for INOUT arguments.
2887+
If all the arguments are IN arguments, this field will be null.
2888+
Note that subscripts correspond to positions of
2889+
<structfield>proallargtypes</> not <structfield>proargtypes</>.
2890+
</entry>
28592891
</row>
28602892

28612893
<row>
@@ -2865,7 +2897,9 @@
28652897
<entry>
28662898
An array with the names of the function arguments.
28672899
Arguments without a name are set to empty strings in the array.
2868-
If none of the arguments have a name, this field may be null.
2900+
If none of the arguments have a name, this field will be null.
2901+
Note that subscripts correspond to positions of
2902+
<structfield>proallargtypes</> not <structfield>proargtypes</>.
28692903
</entry>
28702904
</row>
28712905

‎src/backend/bootstrap/bootstrap.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.200 2005/03/2900:16:54 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/bootstrap/bootstrap.c,v 1.201 2005/03/2919:44:22 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -147,6 +147,10 @@ static const struct typinfo TypInfo[] = {
147147
F_ARRAY_IN,F_ARRAY_OUT},
148148
{"_text",1009,TEXTOID,-1, false,'i','x',
149149
F_ARRAY_IN,F_ARRAY_OUT},
150+
{"_oid",1028,OIDOID,-1, false,'i','x',
151+
F_ARRAY_IN,F_ARRAY_OUT},
152+
{"_char",1002,CHAROID,-1, false,'i','x',
153+
F_ARRAY_IN,F_ARRAY_OUT},
150154
{"_aclitem",1034,ACLITEMOID,-1, false,'i','x',
151155
F_ARRAY_IN,F_ARRAY_OUT}
152156
};

‎src/backend/catalog/pg_proc.c

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.124 2005/03/2900:16:56 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/catalog/pg_proc.c,v 1.125 2005/03/2919:44:23 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -151,32 +151,36 @@ ProcedureCreate(const char *procedureName,
151151
for (i=0;i<Natts_pg_proc;++i)
152152
{
153153
nulls[i]=' ';
154-
values[i]= (Datum)NULL;
154+
values[i]= (Datum)0;
155155
replaces[i]='r';
156156
}
157157

158-
i=0;
159158
namestrcpy(&procname,procedureName);
160-
values[i++]=NameGetDatum(&procname);/* proname */
161-
values[i++]=ObjectIdGetDatum(procNamespace);/* pronamespace */
162-
values[i++]=Int32GetDatum(GetUserId());/* proowner */
163-
values[i++]=ObjectIdGetDatum(languageObjectId);/* prolang */
164-
values[i++]=BoolGetDatum(isAgg);/* proisagg */
165-
values[i++]=BoolGetDatum(security_definer);/* prosecdef */
166-
values[i++]=BoolGetDatum(isStrict);/* proisstrict */
167-
values[i++]=BoolGetDatum(returnsSet);/* proretset */
168-
values[i++]=CharGetDatum(volatility);/* provolatile */
169-
values[i++]=UInt16GetDatum(parameterCount);/* pronargs */
170-
values[i++]=ObjectIdGetDatum(returnType);/* prorettype */
171-
values[i++]=PointerGetDatum(proargtypes);/* proargtypes */
172-
values[i++]=namesarray;/* proargnames */
173-
if (namesarray==PointerGetDatum(NULL))
159+
values[Anum_pg_proc_proname-1]=NameGetDatum(&procname);
160+
values[Anum_pg_proc_pronamespace-1]=ObjectIdGetDatum(procNamespace);
161+
values[Anum_pg_proc_proowner-1]=Int32GetDatum(GetUserId());
162+
values[Anum_pg_proc_prolang-1]=ObjectIdGetDatum(languageObjectId);
163+
values[Anum_pg_proc_proisagg-1]=BoolGetDatum(isAgg);
164+
values[Anum_pg_proc_prosecdef-1]=BoolGetDatum(security_definer);
165+
values[Anum_pg_proc_proisstrict-1]=BoolGetDatum(isStrict);
166+
values[Anum_pg_proc_proretset-1]=BoolGetDatum(returnsSet);
167+
values[Anum_pg_proc_provolatile-1]=CharGetDatum(volatility);
168+
values[Anum_pg_proc_pronargs-1]=UInt16GetDatum(parameterCount);
169+
values[Anum_pg_proc_prorettype-1]=ObjectIdGetDatum(returnType);
170+
values[Anum_pg_proc_proargtypes-1]=PointerGetDatum(proargtypes);
171+
/* XXX for now, just null out the new columns */
172+
nulls[Anum_pg_proc_proallargtypes-1]='n';
173+
nulls[Anum_pg_proc_proargmodes-1]='n';
174+
if (namesarray!=PointerGetDatum(NULL))
175+
values[Anum_pg_proc_proargnames-1]=namesarray;
176+
else
174177
nulls[Anum_pg_proc_proargnames-1]='n';
175-
values[i++]=DirectFunctionCall1(textin,/* prosrc */
178+
values[Anum_pg_proc_prosrc-1]=DirectFunctionCall1(textin,
176179
CStringGetDatum(prosrc));
177-
values[i++]=DirectFunctionCall1(textin,/* probin */
180+
values[Anum_pg_proc_probin-1]=DirectFunctionCall1(textin,
178181
CStringGetDatum(probin));
179-
/* proacl will be handled below */
182+
/* start out with empty permissions */
183+
nulls[Anum_pg_proc_proacl-1]='n';
180184

181185
rel=heap_openr(ProcedureRelationName,RowExclusiveLock);
182186
tupDesc=RelationGetDescr(rel);
@@ -242,10 +246,6 @@ ProcedureCreate(const char *procedureName,
242246
else
243247
{
244248
/* Creating a new procedure */
245-
246-
/* start out with empty permissions */
247-
nulls[Anum_pg_proc_proacl-1]='n';
248-
249249
tup=heap_formtuple(tupDesc,values,nulls);
250250
simple_heap_insert(rel,tup);
251251
is_update= false;

‎src/include/catalog/catversion.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
3838
* Portions Copyright (c) 1994, Regents of the University of California
3939
*
40-
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.261 2005/03/2900:17:16 tgl Exp $
40+
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.262 2005/03/2919:44:23 tgl Exp $
4141
*
4242
*-------------------------------------------------------------------------
4343
*/
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/*yyyymmddN */
56-
#defineCATALOG_VERSION_NO200503281
56+
#defineCATALOG_VERSION_NO200503291
5757

5858
#endif

‎src/include/catalog/pg_attribute.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
99
* Portions Copyright (c) 1994, Regents of the University of California
1010
*
11-
* $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.114 2005/03/2900:17:17 tgl Exp $
11+
* $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.115 2005/03/2919:44:23 tgl Exp $
1212
*
1313
* NOTES
1414
* the genbki.sh script reads this file and generates .bki
@@ -318,10 +318,12 @@ DATA(insert ( 1262 tableoid26 0 4 -7 0 -1 -1 t p i t f f t 0));
318318
{ 1255, {"pronargs"},21, -1, 2, 10, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
319319
{ 1255, {"prorettype"},26, -1, 4, 11, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
320320
{ 1255, {"proargtypes"},30, -1, -1, 12, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
321-
{ 1255, {"proargnames"}, 1009, -1, -1, 13, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
322-
{ 1255, {"prosrc"},25, -1, -1, 14, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
323-
{ 1255, {"probin"},17, -1, -1, 15, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
324-
{ 1255, {"proacl"}, 1034, -1, -1, 16, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
321+
{ 1255, {"proallargtypes"}, 1028, -1, -1, 13, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
322+
{ 1255, {"proargmodes"}, 1002, -1, -1, 14, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
323+
{ 1255, {"proargnames"}, 1009, -1, -1, 15, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
324+
{ 1255, {"prosrc"},25, -1, -1, 16, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
325+
{ 1255, {"probin"},17, -1, -1, 17, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
326+
{ 1255, {"proacl"}, 1034, -1, -1, 18, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
325327

326328
DATA(insert (1255proname19-1NAMEDATALEN10-1-1fpitfft0));
327329
DATA(insert (1255pronamespace26-1420-1-1tpitfft0));
@@ -335,10 +337,12 @@ DATA(insert ( 1255 provolatile18 -1 1 9 0 -1 -1 t p c t f f t 0));
335337
DATA(insert (1255pronargs21-12100-1-1tpstfft0));
336338
DATA(insert (1255prorettype26-14110-1-1tpitfft0));
337339
DATA(insert (1255proargtypes30-1-1121-1-1fpitfft0));
338-
DATA(insert (1255proargnames1009-1-1131-1-1fxiffft0));
339-
DATA(insert (1255prosrc25-1-1140-1-1fxiffft0));
340-
DATA(insert (1255probin17-1-1150-1-1fxiffft0));
341-
DATA(insert (1255proacl1034-1-1161-1-1fxiffft0));
340+
DATA(insert (1255proallargtypes1028-1-1131-1-1fxiffft0));
341+
DATA(insert (1255proargmodes1002-1-1141-1-1fxiffft0));
342+
DATA(insert (1255proargnames1009-1-1151-1-1fxiffft0));
343+
DATA(insert (1255prosrc25-1-1160-1-1fxiffft0));
344+
DATA(insert (1255probin17-1-1170-1-1fxiffft0));
345+
DATA(insert (1255proacl1034-1-1181-1-1fxiffft0));
342346
DATA(insert (1255ctid2706-10-1-1fpstfft0));
343347
DATA(insert (1255oid2604-20-1-1tpitfft0));
344348
DATA(insert (1255xmin2804-30-1-1tpitfft0));

‎src/include/catalog/pg_class.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
99
* Portions Copyright (c) 1994, Regents of the University of California
1010
*
11-
* $PostgreSQL: pgsql/src/include/catalog/pg_class.h,v 1.85 2004/12/31 22:03:24 pgsql Exp $
11+
* $PostgreSQL: pgsql/src/include/catalog/pg_class.h,v 1.86 2005/03/29 19:44:23 tgl Exp $
1212
*
1313
* NOTES
1414
* the genbki.sh script reads this file and generates .bki
@@ -140,7 +140,7 @@ DATA(insert OID = 1247 ( pg_typePGNSP 71 PGUID 0 1247 0 0 0 0 0 f f r 23 0 0
140140
DESCR("");
141141
DATA(insertOID=1249 (pg_attributePGNSP75PGUID0124900000ffr1700000ffff_null_ ));
142142
DESCR("");
143-
DATA(insertOID=1255 (pg_procPGNSP81PGUID0125500000ffr1600000tfff_null_ ));
143+
DATA(insertOID=1255 (pg_procPGNSP81PGUID0125500000ffr1800000tfff_null_ ));
144144
DESCR("");
145145
DATA(insertOID=1259 (pg_classPGNSP83PGUID0125900000ffr2500000tfff_null_ ));
146146
DESCR("");

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp