1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-15 19:21:59 +03:00

This patch implements ORACLE's COMMENT SQL command.

>From the ORACLE 7 SQL Language Reference Manual:
-----------------------------------------------------
COMMENT

Purpose:

To add a comment about a table, view, snapshot, or
column into the data dictionary.

Prerequisites:

The table, view, or snapshot must be in your own
schema
or you must have COMMENT ANY TABLE system privilege.

Syntax:

COMMENT ON [ TABLE table ] |
           [ COLUMN table.column] IS 'text'

You can effectively drop a comment from the database
by setting it to the empty string ''.
-----------------------------------------------------

Example:

COMMENT ON TABLE workorders IS
   'Maintains base records for workorder information';

COMMENT ON COLUMN workorders.hours IS
   'Number of hours the engineer worked on the task';

to drop a comment:

COMMENT ON COLUMN workorders.hours IS '';

The current patch will simply perform the insert into
pg_description, as per the TODO. And, of course, when
the table is dropped, any comments relating to it
or any of its attributes are also dropped. I haven't
looked at the ODBC source yet, but I do know from
an ODBC client standpoint that the standard does
support the notion of table and column comments.
Hopefully the ODBC driver is already fetching these
values from pg_description, but if not, it should be
trivial.

Hope this makes the grade,

Mike Mascari
(mascarim@yahoo.com)
This commit is contained in:
Bruce Momjian
1999-10-15 01:49:49 +00:00
parent 55fa71a9e9
commit 7acc237744
12 changed files with 287 additions and 21 deletions

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.48 1999/10/03 23:55:27 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.49 1999/10/15 01:49:39 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -16,10 +16,12 @@
#include "access/heapam.h"
#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/heap.h"
#include "catalog/pg_inherits.h"
#include "catalog/pg_ipl.h"
#include "catalog/pg_type.h"
#include "catalog/pg_description.h"
#include "commands/creatinh.h"
#include "utils/syscache.h"
@ -232,6 +234,52 @@ TruncateRelation(char *name)
heap_truncate(name);
}
/*------------------------------------------------------------------
* CommentRelation --
* Adds a comment to pg_description for the associated
* relation or relation attribute.
*
* Note:
* The comment is dropped on the relation or attribute if
* the comment is an empty string.
*------------------------------------------------------------------
*/
void
CommentRelation(char *relname, char *attrname, char *comments)
{
Relation relation;
HeapTuple attrtuple;
Oid oid;
/*** First ensure relname is valid ***/
relation = heap_openr(relname, AccessShareLock);
/*** Now, if an attribute was specified, fetch its oid, else use relation's oid ***/
if (attrname != NULL) {
attrtuple = SearchSysCacheTuple(ATTNAME, ObjectIdGetDatum(relation->rd_id),
PointerGetDatum(attrname), 0, 0);
if (!HeapTupleIsValid(attrtuple)) {
elog(ERROR, "CommentRelation: attribute \"%s\" is not an attribute of relation \"%s\"",
attrname, relname);
}
oid = attrtuple->t_data->t_oid;
} else {
oid = RelationGetRelid(relation);
}
/*** Call CreateComments() to create/drop the comments ***/
CreateComments(oid, comments);
/*** Now, close the heap relation ***/
heap_close(relation, AccessShareLock);
}
/*
* MergeAttributes
* Returns new schema given initial schema and supers.