mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Support type modifiers for user-defined types, and pull most knowledge
about typmod representation for standard types out into type-specific typmod I/O functions. Teodor Sigaev, with some editorialization by Tom Lane.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.314 2006/11/05 22:42:08 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.315 2006/12/30 21:21:52 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@@ -724,6 +724,8 @@ AddNewRelationType(const char *typeName,
|
||||
F_RECORD_OUT, /* output procedure */
|
||||
F_RECORD_RECV, /* receive procedure */
|
||||
F_RECORD_SEND, /* send procedure */
|
||||
InvalidOid, /* typmodin procedure - none */
|
||||
InvalidOid, /* typmodout procedure - none */
|
||||
InvalidOid, /* analyze procedure - default */
|
||||
InvalidOid, /* array element type - irrelevant */
|
||||
InvalidOid, /* domain base type - irrelevant */
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.108 2006/10/04 00:29:50 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.109 2006/12/30 21:21:53 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -94,6 +94,8 @@ TypeShellMake(const char *typeName, Oid typeNamespace)
|
||||
values[i++] = ObjectIdGetDatum(F_SHELL_OUT); /* typoutput */
|
||||
values[i++] = ObjectIdGetDatum(InvalidOid); /* typreceive */
|
||||
values[i++] = ObjectIdGetDatum(InvalidOid); /* typsend */
|
||||
values[i++] = ObjectIdGetDatum(InvalidOid); /* typmodin */
|
||||
values[i++] = ObjectIdGetDatum(InvalidOid); /* typmodout */
|
||||
values[i++] = ObjectIdGetDatum(InvalidOid); /* typanalyze */
|
||||
values[i++] = CharGetDatum('i'); /* typalign */
|
||||
values[i++] = CharGetDatum('p'); /* typstorage */
|
||||
@@ -132,6 +134,8 @@ TypeShellMake(const char *typeName, Oid typeNamespace)
|
||||
InvalidOid,
|
||||
InvalidOid,
|
||||
InvalidOid,
|
||||
InvalidOid,
|
||||
InvalidOid,
|
||||
NULL,
|
||||
false);
|
||||
|
||||
@@ -164,6 +168,8 @@ TypeCreate(const char *typeName,
|
||||
Oid outputProcedure,
|
||||
Oid receiveProcedure,
|
||||
Oid sendProcedure,
|
||||
Oid typmodinProcedure,
|
||||
Oid typmodoutProcedure,
|
||||
Oid analyzeProcedure,
|
||||
Oid elementType,
|
||||
Oid baseType,
|
||||
@@ -243,6 +249,8 @@ TypeCreate(const char *typeName,
|
||||
values[i++] = ObjectIdGetDatum(outputProcedure); /* typoutput */
|
||||
values[i++] = ObjectIdGetDatum(receiveProcedure); /* typreceive */
|
||||
values[i++] = ObjectIdGetDatum(sendProcedure); /* typsend */
|
||||
values[i++] = ObjectIdGetDatum(typmodinProcedure); /* typmodin */
|
||||
values[i++] = ObjectIdGetDatum(typmodoutProcedure); /* typmodout */
|
||||
values[i++] = ObjectIdGetDatum(analyzeProcedure); /* typanalyze */
|
||||
values[i++] = CharGetDatum(alignment); /* typalign */
|
||||
values[i++] = CharGetDatum(storage); /* typstorage */
|
||||
@@ -341,6 +349,8 @@ TypeCreate(const char *typeName,
|
||||
outputProcedure,
|
||||
receiveProcedure,
|
||||
sendProcedure,
|
||||
typmodinProcedure,
|
||||
typmodoutProcedure,
|
||||
analyzeProcedure,
|
||||
elementType,
|
||||
baseType,
|
||||
@@ -374,6 +384,8 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
Oid outputProcedure,
|
||||
Oid receiveProcedure,
|
||||
Oid sendProcedure,
|
||||
Oid typmodinProcedure,
|
||||
Oid typmodoutProcedure,
|
||||
Oid analyzeProcedure,
|
||||
Oid elementType,
|
||||
Oid baseType,
|
||||
@@ -436,6 +448,22 @@ GenerateTypeDependencies(Oid typeNamespace,
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
}
|
||||
|
||||
if (OidIsValid(typmodinProcedure))
|
||||
{
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = typmodinProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
}
|
||||
|
||||
if (OidIsValid(typmodoutProcedure))
|
||||
{
|
||||
referenced.classId = ProcedureRelationId;
|
||||
referenced.objectId = typmodoutProcedure;
|
||||
referenced.objectSubId = 0;
|
||||
recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
|
||||
}
|
||||
|
||||
if (OidIsValid(analyzeProcedure))
|
||||
{
|
||||
referenced.classId = ProcedureRelationId;
|
||||
|
Reference in New Issue
Block a user