diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-12 23:41:04 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-02-12 23:41:04 +0000 |
| commit | 69946411d3378d11c7c6b95d6db70ba1b3df339a (patch) | |
| tree | f6baa74468c8e0032789d393ba41461487c04d00 /src/backend/catalog | |
| parent | d27471fe0a5b47b1976c13e35197a738dcb09bfe (diff) | |
| download | postgresql-69946411d3378d11c7c6b95d6db70ba1b3df339a.tar.gz | |
Add hooks for type-specific calculation of ANALYZE statistics. Idea and
coding by Mark Cave-Ayland, some kibitzing by Tom Lane. initdb forced
due to new column in pg_type.
Diffstat (limited to 'src/backend/catalog')
| -rw-r--r-- | src/backend/catalog/heap.c | 3 | ||||
| -rw-r--r-- | src/backend/catalog/pg_type.c | 16 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 905aa5b0b2..63595962e4 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.258 2004/02/10 01:55:24 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.259 2004/02/12 23:41:02 tgl Exp $ * * * INTERFACE ROUTINES @@ -689,6 +689,7 @@ AddNewRelationType(const char *typeName, F_RECORD_OUT, /* output procedure */ F_RECORD_RECV, /* receive procedure */ F_RECORD_SEND, /* send procedure */ + InvalidOid, /* analyze procedure - default */ InvalidOid, /* array element type - irrelevant */ InvalidOid, /* domain base type - irrelevant */ NULL, /* default type value - none */ diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 802b01f759..efd2f61747 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.92 2004/01/07 18:56:25 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/pg_type.c,v 1.93 2004/02/12 23:41:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -86,6 +86,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace) values[i++] = ObjectIdGetDatum(InvalidOid); /* typoutput */ values[i++] = ObjectIdGetDatum(InvalidOid); /* typreceive */ values[i++] = ObjectIdGetDatum(InvalidOid); /* typsend */ + values[i++] = ObjectIdGetDatum(InvalidOid); /* typanalyze */ values[i++] = CharGetDatum('i'); /* typalign */ values[i++] = CharGetDatum('p'); /* typstorage */ values[i++] = BoolGetDatum(false); /* typnotnull */ @@ -121,6 +122,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace) InvalidOid, InvalidOid, InvalidOid, + InvalidOid, NULL, false); @@ -157,6 +159,7 @@ TypeCreate(const char *typeName, Oid outputProcedure, Oid receiveProcedure, Oid sendProcedure, + Oid analyzeProcedure, Oid elementType, Oid baseType, const char *defaultTypeValue, /* human readable rep */ @@ -236,6 +239,7 @@ TypeCreate(const char *typeName, values[i++] = ObjectIdGetDatum(outputProcedure); /* typoutput */ values[i++] = ObjectIdGetDatum(receiveProcedure); /* typreceive */ values[i++] = ObjectIdGetDatum(sendProcedure); /* typsend */ + values[i++] = ObjectIdGetDatum(analyzeProcedure); /* typanalyze */ values[i++] = CharGetDatum(alignment); /* typalign */ values[i++] = CharGetDatum(storage); /* typstorage */ values[i++] = BoolGetDatum(typeNotNull); /* typnotnull */ @@ -332,6 +336,7 @@ TypeCreate(const char *typeName, outputProcedure, receiveProcedure, sendProcedure, + analyzeProcedure, elementType, baseType, (defaultTypeBin ? @@ -366,6 +371,7 @@ GenerateTypeDependencies(Oid typeNamespace, Oid outputProcedure, Oid receiveProcedure, Oid sendProcedure, + Oid analyzeProcedure, Oid elementType, Oid baseType, Node *defaultExpr, @@ -425,6 +431,14 @@ GenerateTypeDependencies(Oid typeNamespace, recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); } + if (OidIsValid(analyzeProcedure)) + { + referenced.classId = RelOid_pg_proc; + referenced.objectId = analyzeProcedure; + referenced.objectSubId = 0; + recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL); + } + /* * If the type is a rowtype for a relation, mark it as internally * dependent on the relation, *unless* it is a stand-alone composite |
