added ALTER TABLE DROP COLUMN, early version

This commit is contained in:
Peter Eisentraut 2000-01-22 14:20:56 +00:00
parent 3f51bdafdc
commit fa5400c0a4
19 changed files with 286 additions and 82 deletions

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.63 2000/01/10 06:30:50 inoue Exp $ * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.64 2000/01/22 14:20:43 petere Exp $
* *
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
@ -562,7 +562,7 @@ heap_open(Oid relationId, LOCKMODE lockmode)
* ---------------- * ----------------
*/ */
Relation Relation
heap_openr(char *relationName, LOCKMODE lockmode) heap_openr(const char *relationName, LOCKMODE lockmode)
{ {
Relation r; Relation r;

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.28 2000/01/16 20:04:54 petere Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.29 2000/01/22 14:20:44 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -38,7 +38,7 @@ relpath(const char *relname)
snprintf(path, bufsize, "%s/%s", DataDir, relname); snprintf(path, bufsize, "%s/%s", DataDir, relname);
return path; return path;
} }
return relname; return pstrdup(relname);
} }
/* /*

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.117 2000/01/17 23:57:43 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.118 2000/01/22 14:20:44 petere Exp $
* *
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
@ -480,7 +480,7 @@ CheckAttributeNames(TupleDesc tupdesc)
* -------------------------------- * --------------------------------
*/ */
Oid Oid
RelnameFindRelid(char *relname) RelnameFindRelid(const char *relname)
{ {
HeapTuple tuple; HeapTuple tuple;
Oid relid; Oid relid;
@ -1441,7 +1441,7 @@ DeleteTypeTuple(Relation rel)
* -------------------------------- * --------------------------------
*/ */
void void
heap_drop_with_catalog(char *relname) heap_drop_with_catalog(const char *relname)
{ {
Relation rel; Relation rel;
Oid rid; Oid rid;

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.47 2000/01/17 23:57:43 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.48 2000/01/22 14:20:44 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -525,7 +525,7 @@ TypeCreate(char *typeName,
* ---------------------------------------------------------------- * ----------------------------------------------------------------
*/ */
void void
TypeRename(char *oldTypeName, char *newTypeName) TypeRename(const char *oldTypeName, const char *newTypeName)
{ {
Relation pg_type_desc; Relation pg_type_desc;
Relation idescs[Num_pg_type_indices]; Relation idescs[Num_pg_type_indices];

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.63 2000/01/16 20:04:55 petere Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.64 2000/01/22 14:20:45 petere Exp $
* *
* NOTES * NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated * The PortalExecutorHeapMemory crap needs to be eliminated
@ -30,6 +30,7 @@
#include "catalog/pg_attrdef.h" #include "catalog/pg_attrdef.h"
#include "catalog/pg_type.h" #include "catalog/pg_type.h"
#include "commands/command.h" #include "commands/command.h"
#include "commands/rename.h"
#include "executor/execdefs.h" #include "executor/execdefs.h"
#include "executor/executor.h" #include "executor/executor.h"
#include "catalog/heap.h" #include "catalog/heap.h"
@ -299,7 +300,7 @@ AlterTableAddColumn(const char *relationName,
Relation idescs[Num_pg_attr_indices]; Relation idescs[Num_pg_attr_indices];
Relation ridescs[Num_pg_class_indices]; Relation ridescs[Num_pg_class_indices];
bool hasindex; bool hasindex;
List *rawDefaults = NIL; // List *rawDefaults = NIL;
/* /*
* permissions checking. this would normally be done in utility.c, * permissions checking. this would normally be done in utility.c,
@ -319,7 +320,7 @@ AlterTableAddColumn(const char *relationName,
* Grab an exclusive lock on the target table, which we will NOT release * Grab an exclusive lock on the target table, which we will NOT release
* until end of transaction. * until end of transaction.
*/ */
rel = heap_openr((char *)relationName, AccessExclusiveLock); rel = heap_openr(relationName, AccessExclusiveLock);
myrelid = RelationGetRelid(rel); myrelid = RelationGetRelid(rel);
heap_close(rel, NoLock); /* close rel but keep lock! */ heap_close(rel, NoLock); /* close rel but keep lock! */
@ -519,8 +520,7 @@ AlterTableAlterColumn(const char *relationName,
elog(ERROR, "ALTER TABLE: permission denied"); elog(ERROR, "ALTER TABLE: permission denied");
#endif #endif
/* XXX should heap_openr take const char * ? */ rel = heap_openr(relationName, AccessExclusiveLock);
rel = heap_openr((char *)relationName, AccessExclusiveLock);
myrelid = RelationGetRelid(rel); myrelid = RelationGetRelid(rel);
heap_close(rel, NoLock); heap_close(rel, NoLock);
@ -626,7 +626,7 @@ AlterTableAlterColumn(const char *relationName,
/* keep the system catalog indices current */ /* keep the system catalog indices current */
CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, irelations); CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, irelations);
CatalogIndexInsert(irelations, Num_pg_attr_indices, attr_rel, newtuple); CatalogIndexInsert(irelations, Num_pg_attr_indices, attr_rel, newtuple);
CatalogCloseIndices(Num_pg_class_indices, irelations); CatalogCloseIndices(Num_pg_attrdef_indices, irelations);
/* get rid of actual default definition */ /* get rid of actual default definition */
drop_default(myrelid, attnum); drop_default(myrelid, attnum);
@ -672,31 +672,234 @@ drop_default(Oid relid, int16 attnum)
/* /*
* ALTER TABLE DROP COLUMN * ALTER TABLE DROP COLUMN
*
* Strategy:
* - permission/sanity checks
* - create a new table _ATDC<name> with all attributes minus the desired one
* - copy over all the data
* - make the column defaults point to the new table
* - kill the old table
* - rename the intermediate table back
*/ */
void void
AlterTableDropColumn(const char *relationName, AlterTableDropColumn(const char *relationName,
bool inh, const char *colName, bool inh, const char *colName,
int behavior) int behavior)
{ {
elog(NOTICE, "ALTER TABLE / DROP COLUMN is not implemented"); Relation oldrel, newrel, defrel;
HeapTuple tuple;
TupleDesc olddesc, newdesc, defdsc;
int16 dropattnum, oldnumatts;
Oid oldrel_oid, newrel_oid;
char tmpname[NAMEDATALEN];
int16 i;
HeapScanDesc scan;
ScanKeyData scankey;
if (!allowSystemTableMods && IsSystemRelationName(relationName))
elog(ERROR, "ALTER TABLE: relation \"%s\" is a system catalog",
relationName);
#ifndef NO_SECURITY
if (!pg_ownercheck(UserName, relationName, RELNAME))
elog(ERROR, "ALTER TABLE: permission denied");
#endif
oldrel = heap_openr(relationName, AccessExclusiveLock);
if (oldrel->rd_rel->relkind != RELKIND_RELATION)
{
heap_close(oldrel, AccessExclusiveLock);
elog(ERROR, "ALTER TABLE: relation %s is not a table", relationName);
}
oldrel_oid = ObjectIdGetDatum(RelationGetRelid(oldrel));
oldnumatts = RelationGetNumberOfAttributes(oldrel);
if (oldnumatts==1)
{
heap_close(oldrel, AccessExclusiveLock);
elog(ERROR, "ALTER TABLE: relation %s only has one column", relationName);
}
/* What to do here? */
/*
if (length(find_all_inheritors(RelationGetRelid(oldrel)))>0)
elog(ERROR, "ALTER TABLE: cannot drop a column on table that is inherited from");
*/
/*
* get the number of the attribute
*/
tuple = SearchSysCacheTuple(ATTNAME, oldrel_oid, NameGetDatum(namein(colName)), 0, 0);
if (!HeapTupleIsValid(tuple))
{
heap_close(oldrel, AccessExclusiveLock);
elog(ERROR, "ALTER TABLE: relation \"%s\" has no column \"%s\"",
relationName, colName);
}
dropattnum = ((Form_pg_attribute) GETSTRUCT(tuple))->attnum;
if (snprintf(tmpname, NAMEDATALEN, "_ATDC%s", relationName)==-1)
{
heap_close(oldrel, AccessExclusiveLock);
elog(ERROR, "AlterTableDropColumn: relation name too long");
}
/*
* Build descriptor for new relation
*/
olddesc = RelationGetDescr(oldrel);
newdesc = CreateTemplateTupleDesc(oldnumatts-1);
for(i = 1; i < dropattnum; i++)
{
Form_pg_attribute att = olddesc->attrs[i-1];
TupleDescInitEntry(newdesc, i, nameout(&(att->attname)),
att->atttypid, att->atttypmod,
att->attnelems, att->attisset);
/* the above function doesn't take care of these two */
newdesc->attrs[i-1]->attnotnull = att->attnotnull;
newdesc->attrs[i-1]->atthasdef = att->atthasdef;
}
for(i = dropattnum; i <= oldnumatts-1; i++)
{
Form_pg_attribute att = olddesc->attrs[i];
TupleDescInitEntry(newdesc, i, nameout(&(att->attname)),
att->atttypid, att->atttypmod,
att->attnelems, att->attisset);
/* the above function doesn't take care of these two */
newdesc->attrs[i-1]->attnotnull = att->attnotnull;
newdesc->attrs[i-1]->atthasdef = att->atthasdef;
}
/* Create the new table */
newrel_oid = heap_create_with_catalog(tmpname, newdesc, RELKIND_RELATION, false);
if (newrel_oid == InvalidOid)
{
heap_close(oldrel, AccessExclusiveLock);
elog(ERROR, "ALTER TABLE: something went wrong");
}
/* Make the new table visible */
CommandCounterIncrement();
/*
* Copy over the data
*/
newrel = heap_open(newrel_oid, AccessExclusiveLock);
scan = heap_beginscan(oldrel, false, SnapshotNow, 0, NULL);
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
{
bool isnull;
Datum *new_record;
bool *new_record_nulls;
HeapTuple new_tuple;
new_record = palloc((oldnumatts-1) * sizeof(*new_record));
new_record_nulls = palloc((oldnumatts-1) * sizeof(*new_record_nulls));
for(i = 1; i < dropattnum; i++)
{
new_record[i-1] = heap_getattr(tuple, i, olddesc, &isnull);
new_record_nulls[i-1] = isnull ? 'n' : ' ';
}
for(i = dropattnum+1; i <= oldnumatts; i++)
{
new_record[i-2] = heap_getattr(tuple, i, olddesc, &isnull);
new_record_nulls[i-2] = isnull ? 'n' : ' ';
}
new_tuple = heap_formtuple(newdesc, new_record, new_record_nulls);
Assert(new_tuple);
if (heap_insert(newrel, new_tuple) == InvalidOid)
elog(ERROR, "AlterTableDropColumn: heap_insert failed");
pfree(new_record);
pfree(new_record_nulls);
}
heap_endscan(scan);
heap_close(newrel, NoLock);
heap_close(oldrel, NoLock);
/*
* Move defaults over to the new table
*/
defrel = heap_openr(AttrDefaultRelationName, AccessExclusiveLock);
defdsc = RelationGetDescr(defrel);
/* look for all entries referencing the old table */
ScanKeyEntryInitialize(&scankey, 0x0, Anum_pg_attrdef_adrelid, F_OIDEQ,
ObjectIdGetDatum(oldrel_oid));
scan = heap_beginscan(defrel, false, SnapshotNow, 1, &scankey);
while(HeapTupleIsValid(tuple = heap_getnext(scan, false)))
{
HeapTuple newtuple;
int2 attrnum;
Relation irelations[Num_pg_attrdef_indices];
attrnum = ((Form_pg_attrdef) GETSTRUCT(tuple))->adnum;
/* remove the entry about the dropped column */
if (attrnum == dropattnum)
{
heap_delete(defrel, &tuple->t_self, NULL);
continue;
}
newtuple = heap_copytuple(tuple);
if (attrnum > dropattnum)
((Form_pg_attrdef) GETSTRUCT(newtuple))->adnum--;
/* make it point to the new table */
((Form_pg_attrdef) GETSTRUCT(newtuple))->adrelid = newrel_oid;
heap_update(defrel, &tuple->t_self, newtuple, NULL);
/* keep the system catalog indices current */
CatalogOpenIndices(Num_pg_attrdef_indices, Name_pg_attrdef_indices, irelations);
CatalogIndexInsert(irelations, Num_pg_attrdef_indices, defrel, newtuple);
CatalogCloseIndices(Num_pg_attrdef_indices, irelations);
}
heap_endscan(scan);
heap_close(defrel, NoLock);
CommandCounterIncrement();
/* make the old table disappear */
heap_drop_with_catalog(relationName);
CommandCounterIncrement();
/* set back original name */
TypeRename(tmpname, relationName);
renamerel(tmpname, relationName);
} }
/*
* ALTER TABLE ADD CONSTRAINT
*/
void void
AlterTableAddConstraint(const char *relationName, AlterTableAddConstraint(const char *relationName,
bool inh, Node *newConstraint) bool inh, Node *newConstraint)
{ {
elog(NOTICE, "ALTER TABLE / ADD CONSTRAINT is not implemented"); elog(ERROR, "ALTER TABLE / ADD CONSTRAINT is not implemented");
} }
void AlterTableDropConstraint(const char *relationName, /*
bool inh, const char *constrName, * ALTER TABLE DROP CONSTRAINT
int behavior) */
void
AlterTableDropConstraint(const char *relationName,
bool inh, const char *constrName,
int behavior)
{ {
elog(NOTICE, "ALTER TABLE / DROP CONSTRAINT is not implemented"); elog(ERROR, "ALTER TABLE / DROP CONSTRAINT is not implemented");
} }

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.39 1999/12/16 22:19:42 wieck Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.40 2000/01/22 14:20:45 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -172,7 +172,7 @@ renameatt(char *relname,
* renamerel - change the name of a relation * renamerel - change the name of a relation
*/ */
void void
renamerel(char *oldrelname, char *newrelname) renamerel(const char *oldrelname, const char *newrelname)
{ {
int i; int i;
Relation targetrelation; Relation targetrelation;

View File

@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.132 2000/01/20 02:24:50 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.133 2000/01/22 14:20:46 petere Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@ -830,14 +830,14 @@ AlterTableStmt:
$$ = (Node *)n; $$ = (Node *)n;
} }
/* ALTER TABLE <name> DROP [COLUMN] <name> {RESTRICT|CASCADE} */ /* ALTER TABLE <name> DROP [COLUMN] <name> {RESTRICT|CASCADE} */
| ALTER TABLE relation_name opt_inh_star DROP opt_column ColId drop_behavior | ALTER TABLE relation_name opt_inh_star DROP opt_column ColId /* drop_behavior */
{ {
AlterTableStmt *n = makeNode(AlterTableStmt); AlterTableStmt *n = makeNode(AlterTableStmt);
n->subtype = 'D'; n->subtype = 'D';
n->relname = $3; n->relname = $3;
n->inh = $4; n->inh = $4;
n->name = $7; n->name = $7;
n->behavior = $8; /* n->behavior = $8; */
$$ = (Node *)n; $$ = (Node *)n;
} }
/* ALTER TABLE <name> ADD CONSTRAINT ... */ /* ALTER TABLE <name> ADD CONSTRAINT ... */

View File

@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.25 1999/11/25 19:15:20 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.26 2000/01/22 14:20:49 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -31,7 +31,7 @@
* Now, always NULL terminated * Now, always NULL terminated
*/ */
NameData * NameData *
namein(char *s) namein(const char *s)
{ {
NameData *result; NameData *result;
int len; int len;
@ -54,7 +54,7 @@ namein(char *s)
* nameout - converts internal reprsentation to "..." * nameout - converts internal reprsentation to "..."
*/ */
char * char *
nameout(NameData *s) nameout(const NameData *s)
{ {
if (s == NULL) if (s == NULL)
return "-"; return "-";
@ -82,7 +82,7 @@ nameout(NameData *s)
* *
*/ */
bool bool
nameeq(NameData *arg1, NameData *arg2) nameeq(const NameData *arg1, const NameData *arg2)
{ {
if (!arg1 || !arg2) if (!arg1 || !arg2)
return 0; return 0;
@ -91,7 +91,7 @@ nameeq(NameData *arg1, NameData *arg2)
} }
bool bool
namene(NameData *arg1, NameData *arg2) namene(const NameData *arg1, const NameData *arg2)
{ {
if (arg1 == NULL || arg2 == NULL) if (arg1 == NULL || arg2 == NULL)
return (bool) 0; return (bool) 0;
@ -99,7 +99,7 @@ namene(NameData *arg1, NameData *arg2)
} }
bool bool
namelt(NameData *arg1, NameData *arg2) namelt(const NameData *arg1, const NameData *arg2)
{ {
if (arg1 == NULL || arg2 == NULL) if (arg1 == NULL || arg2 == NULL)
return (bool) 0; return (bool) 0;
@ -107,7 +107,7 @@ namelt(NameData *arg1, NameData *arg2)
} }
bool bool
namele(NameData *arg1, NameData *arg2) namele(const NameData *arg1, const NameData *arg2)
{ {
if (arg1 == NULL || arg2 == NULL) if (arg1 == NULL || arg2 == NULL)
return (bool) 0; return (bool) 0;
@ -115,7 +115,7 @@ namele(NameData *arg1, NameData *arg2)
} }
bool bool
namegt(NameData *arg1, NameData *arg2) namegt(const NameData *arg1, const NameData *arg2)
{ {
if (arg1 == NULL || arg2 == NULL) if (arg1 == NULL || arg2 == NULL)
return (bool) 0; return (bool) 0;
@ -124,7 +124,7 @@ namegt(NameData *arg1, NameData *arg2)
} }
bool bool
namege(NameData *arg1, NameData *arg2) namege(const NameData *arg1, const NameData *arg2)
{ {
if (arg1 == NULL || arg2 == NULL) if (arg1 == NULL || arg2 == NULL)
return (bool) 0; return (bool) 0;
@ -163,7 +163,7 @@ namecmp(Name n1, Name n2)
#endif #endif
int int
namestrcpy(Name name, char *str) namestrcpy(Name name, const char *str)
{ {
if (!name || !str) if (!name || !str)
return -1; return -1;
@ -173,7 +173,7 @@ namestrcpy(Name name, char *str)
#ifdef NOT_USED #ifdef NOT_USED
int int
namestrcat(Name name, char *str) namestrcat(Name name, const char *str)
{ {
int i; int i;
char *p, char *p,
@ -195,7 +195,7 @@ namestrcat(Name name, char *str)
#endif #endif
int int
namestrcmp(Name name, char *str) namestrcmp(Name name, const char *str)
{ {
if (!name && !str) if (!name && !str)
return 0; return 0;

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.85 2000/01/15 02:59:39 petere Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.86 2000/01/22 14:20:50 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -62,7 +62,7 @@
static void RelationClearRelation(Relation relation, bool rebuildIt); static void RelationClearRelation(Relation relation, bool rebuildIt);
static void RelationFlushRelation(Relation *relationPtr, static void RelationFlushRelation(Relation *relationPtr,
bool onlyFlushReferenceCountZero); bool onlyFlushReferenceCountZero);
static Relation RelationNameCacheGetRelation(char *relationName); static Relation RelationNameCacheGetRelation(const char *relationName);
static void RelationCacheAbortWalker(Relation *relationPtr, static void RelationCacheAbortWalker(Relation *relationPtr,
int dummy); int dummy);
static void init_irels(void); static void init_irels(void);
@ -1067,7 +1067,7 @@ RelationIdCacheGetRelation(Oid relationId)
* -------------------------------- * --------------------------------
*/ */
static Relation static Relation
RelationNameCacheGetRelation(char *relationName) RelationNameCacheGetRelation(const char *relationName)
{ {
Relation rd; Relation rd;
NameData name; NameData name;
@ -1144,7 +1144,7 @@ RelationIdGetRelation(Oid relationId)
* -------------------------------- * --------------------------------
*/ */
Relation Relation
RelationNameGetRelation(char *relationName) RelationNameGetRelation(const char *relationName)
{ {
char *temprelname; char *temprelname;
Relation rd; Relation rd;
@ -1180,7 +1180,7 @@ RelationNameGetRelation(char *relationName)
* ---------------- * ----------------
*/ */
buildinfo.infotype = INFO_RELNAME; buildinfo.infotype = INFO_RELNAME;
buildinfo.i.info_name = relationName; buildinfo.i.info_name = (char *)relationName;
rd = RelationBuildDesc(buildinfo, NULL); rd = RelationBuildDesc(buildinfo, NULL);
return rd; return rd;
@ -1727,7 +1727,7 @@ AttrDefaultFetch(Relation relation)
if (adform->adnum != attrdef[i].adnum) if (adform->adnum != attrdef[i].adnum)
continue; continue;
if (attrdef[i].adbin != NULL) if (attrdef[i].adbin != NULL)
elog(ERROR, "AttrDefaultFetch: second record found for attr %s in rel %s", elog(NOTICE, "AttrDefaultFetch: second record found for attr %s in rel %s",
NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname), NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname),
RelationGetRelationName(relation)); RelationGetRelationName(relation));
@ -1735,7 +1735,7 @@ AttrDefaultFetch(Relation relation)
Anum_pg_attrdef_adbin, Anum_pg_attrdef_adbin,
adrel->rd_att, &isnull); adrel->rd_att, &isnull);
if (isnull) if (isnull)
elog(ERROR, "AttrDefaultFetch: adbin IS NULL for attr %s in rel %s", elog(NOTICE, "AttrDefaultFetch: adbin IS NULL for attr %s in rel %s",
NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname), NameStr(relation->rd_att->attrs[adform->adnum - 1]->attname),
RelationGetRelationName(relation)); RelationGetRelationName(relation));
attrdef[i].adbin = textout(val); attrdef[i].adbin = textout(val);
@ -1744,13 +1744,13 @@ AttrDefaultFetch(Relation relation)
ReleaseBuffer(buffer); ReleaseBuffer(buffer);
if (i >= ndef) if (i >= ndef)
elog(ERROR, "AttrDefaultFetch: unexpected record found for attr %d in rel %s", elog(NOTICE, "AttrDefaultFetch: unexpected record found for attr %d in rel %s",
adform->adnum, adform->adnum,
RelationGetRelationName(relation)); RelationGetRelationName(relation));
} }
if (found < ndef) if (found < ndef)
elog(ERROR, "AttrDefaultFetch: %d record not found for rel %s", elog(NOTICE, "AttrDefaultFetch: %d record not found for rel %s",
ndef - found, RelationGetRelationName(relation)); ndef - found, RelationGetRelationName(relation));
index_endscan(sd); index_endscan(sd);

View File

@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.18 1999/12/10 03:56:00 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.19 2000/01/22 14:20:50 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -49,7 +49,7 @@ typedef struct TempTable
void void
create_temp_relation(char *relname, HeapTuple pg_class_tuple) create_temp_relation(const char *relname, HeapTuple pg_class_tuple)
{ {
MemoryContext oldcxt; MemoryContext oldcxt;
TempTable *temp_rel; TempTable *temp_rel;
@ -202,7 +202,7 @@ invalidate_temp_relations(void)
} }
char * char *
get_temp_rel_by_username(char *user_relname) get_temp_rel_by_username(const char *user_relname)
{ {
List *l; List *l;
@ -217,7 +217,7 @@ get_temp_rel_by_username(char *user_relname)
} }
char * char *
get_temp_rel_by_physicalname(char *relname) get_temp_rel_by_physicalname(const char *relname)
{ {
List *l; List *l;
@ -229,5 +229,5 @@ get_temp_rel_by_physicalname(char *relname)
return temp_rel->user_relname; return temp_rel->user_relname;
} }
/* needed for bootstrapping temp tables */ /* needed for bootstrapping temp tables */
return relname; return pstrdup(relname);
} }

View File

@ -3,7 +3,7 @@
* *
* Copyright 2000 by PostgreSQL Global Development Team * Copyright 2000 by PostgreSQL Global Development Team
* *
* $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.13 2000/01/18 23:30:22 petere Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.14 2000/01/22 14:20:51 petere Exp $
*/ */
#include <c.h> #include <c.h>
#include "command.h" #include "command.h"
@ -1217,6 +1217,7 @@ process_file(char *filename)
pset.inputfile = filename; pset.inputfile = filename;
result = MainLoop(fd); result = MainLoop(fd);
fclose(fd); fclose(fd);
pset.inputfile = NULL;
return (result == EXIT_SUCCESS); return (result == EXIT_SUCCESS);
} }

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: heapam.h,v 1.49 1999/12/16 22:19:58 wieck Exp $ * $Id: heapam.h,v 1.50 2000/01/22 14:20:52 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -248,7 +248,7 @@ extern HeapAccessStatistics heap_access_stats; /* in stats.c */
/* heapam.c */ /* heapam.c */
extern Relation heap_open(Oid relationId, LOCKMODE lockmode); extern Relation heap_open(Oid relationId, LOCKMODE lockmode);
extern Relation heap_openr(char *relationName, LOCKMODE lockmode); extern Relation heap_openr(const char *relationName, LOCKMODE lockmode);
extern void heap_close(Relation relation, LOCKMODE lockmode); extern void heap_close(Relation relation, LOCKMODE lockmode);
extern HeapScanDesc heap_beginscan(Relation relation, int atend, extern HeapScanDesc heap_beginscan(Relation relation, int atend,
Snapshot snapshot, unsigned nkeys, ScanKey key); Snapshot snapshot, unsigned nkeys, ScanKey key);

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: heap.h,v 1.26 1999/12/10 03:56:05 momjian Exp $ * $Id: heap.h,v 1.27 2000/01/22 14:20:53 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -21,7 +21,7 @@ typedef struct RawColumnDefault
Node *raw_default; /* default value (untransformed parse tree) */ Node *raw_default; /* default value (untransformed parse tree) */
} RawColumnDefault; } RawColumnDefault;
extern Oid RelnameFindRelid(char *relname); extern Oid RelnameFindRelid(const char *relname);
extern Relation heap_create(char *relname, TupleDesc att, extern Relation heap_create(char *relname, TupleDesc att,
bool isnoname, bool istemp, bool storage_create); bool isnoname, bool istemp, bool storage_create);
extern bool heap_storage_create(Relation rel); extern bool heap_storage_create(Relation rel);
@ -29,7 +29,7 @@ extern bool heap_storage_create(Relation rel);
extern Oid heap_create_with_catalog(char *relname, TupleDesc tupdesc, extern Oid heap_create_with_catalog(char *relname, TupleDesc tupdesc,
char relkind, bool istemp); char relkind, bool istemp);
extern void heap_drop_with_catalog(char *relname); extern void heap_drop_with_catalog(const char *relname);
extern void heap_truncate(char *relname); extern void heap_truncate(char *relname);
extern void heap_drop(Relation rel); extern void heap_drop(Relation rel);

View File

@ -7,7 +7,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_type.h,v 1.77 2000/01/17 01:29:07 tgl Exp $ * $Id: pg_type.h,v 1.78 2000/01/22 14:20:53 petere Exp $
* *
* NOTES * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
@ -410,7 +410,7 @@ extern Oid TypeCreate(char *typeName,
char *elementTypeName, char *elementTypeName,
char *defaultTypeValue, char *defaultTypeValue,
bool passedByValue, char alignment); bool passedByValue, char alignment);
extern void TypeRename(char *oldTypeName, char *newTypeName); extern void TypeRename(const char *oldTypeName, const char *newTypeName);
extern char *makeArrayTypeName(char *typeName); extern char *makeArrayTypeName(char *typeName);

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: rename.h,v 1.6 1999/02/13 23:21:19 momjian Exp $ * $Id: rename.h,v 1.7 2000/01/22 14:20:54 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -18,7 +18,7 @@ extern void renameatt(char *relname,
char *newattname, char *newattname,
char *userName, int recurse); char *userName, int recurse);
extern void renamerel(char *oldrelname, extern void renamerel(const char *oldrelname,
char *newrelname); const char *newrelname);
#endif /* RENAME_H */ #endif /* RENAME_H */

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: builtins.h,v 1.95 2000/01/10 16:13:22 momjian Exp $ * $Id: builtins.h,v 1.96 2000/01/22 14:20:55 petere Exp $
* *
* NOTES * NOTES
* This should normally only be included by fmgr.h. * This should normally only be included by fmgr.h.
@ -136,17 +136,17 @@ extern int32 int4larger(int32 arg1, int32 arg2);
extern int32 int4smaller(int32 arg1, int32 arg2); extern int32 int4smaller(int32 arg1, int32 arg2);
/* name.c */ /* name.c */
extern NameData *namein(char *s); extern NameData *namein(const char *s);
extern char *nameout(NameData *s); extern char *nameout(const NameData *s);
extern bool nameeq(NameData *arg1, NameData *arg2); extern bool nameeq(const NameData *arg1, const NameData *arg2);
extern bool namene(NameData *arg1, NameData *arg2); extern bool namene(const NameData *arg1, const NameData *arg2);
extern bool namelt(NameData *arg1, NameData *arg2); extern bool namelt(const NameData *arg1, const NameData *arg2);
extern bool namele(NameData *arg1, NameData *arg2); extern bool namele(const NameData *arg1, const NameData *arg2);
extern bool namegt(NameData *arg1, NameData *arg2); extern bool namegt(const NameData *arg1, const NameData *arg2);
extern bool namege(NameData *arg1, NameData *arg2); extern bool namege(const NameData *arg1, const NameData *arg2);
extern int namecpy(Name n1, Name n2); extern int namecpy(Name n1, Name n2);
extern int namestrcpy(Name name, char *str); extern int namestrcpy(Name name, const char *str);
extern int namestrcmp(Name name, char *str); extern int namestrcmp(Name name, const char *str);
/* numutils.c */ /* numutils.c */
/* XXX hack. HP-UX has a ltoa (with different arguments) already. */ /* XXX hack. HP-UX has a ltoa (with different arguments) already. */

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: rel.h,v 1.31 2000/01/10 17:14:44 momjian Exp $ * $Id: rel.h,v 1.32 2000/01/22 14:20:56 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -176,7 +176,7 @@ typedef Relation *RelationPtr;
* Returns a Relation Name * Returns a Relation Name
*/ */
/* added to prevent circular dependency. bjm 1999/11/15 */ /* added to prevent circular dependency. bjm 1999/11/15 */
char *get_temp_rel_by_physicalname(char *relname); char *get_temp_rel_by_physicalname(const char *relname);
#define RelationGetRelationName(relation) \ #define RelationGetRelationName(relation) \
(\ (\
(strncmp(RelationGetPhysicalRelationName(relation), \ (strncmp(RelationGetPhysicalRelationName(relation), \

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: relcache.h,v 1.16 1999/11/21 01:58:20 tgl Exp $ * $Id: relcache.h,v 1.17 2000/01/22 14:20:56 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -20,7 +20,7 @@
*/ */
extern Relation RelationIdCacheGetRelation(Oid relationId); extern Relation RelationIdCacheGetRelation(Oid relationId);
extern Relation RelationIdGetRelation(Oid relationId); extern Relation RelationIdGetRelation(Oid relationId);
extern Relation RelationNameGetRelation(char *relationName); extern Relation RelationNameGetRelation(const char *relationName);
extern void RelationClose(Relation relation); extern void RelationClose(Relation relation);
extern void RelationForgetRelation(Oid rid); extern void RelationForgetRelation(Oid rid);

View File

@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: temprel.h,v 1.6 1999/11/16 04:14:03 momjian Exp $ * $Id: temprel.h,v 1.7 2000/01/22 14:20:56 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -15,11 +15,11 @@
#include "access/htup.h" #include "access/htup.h"
void create_temp_relation(char *relname, HeapTuple pg_class_tuple); void create_temp_relation(const char *relname, HeapTuple pg_class_tuple);
void remove_all_temp_relations(void); void remove_all_temp_relations(void);
void invalidate_temp_relations(void); void invalidate_temp_relations(void);
void remove_temp_relation(Oid relid); void remove_temp_relation(Oid relid);
char *get_temp_rel_by_username(char *user_relname); char *get_temp_rel_by_username(const char *user_relname);
char *get_temp_rel_by_physicalname(char *relname); char *get_temp_rel_by_physicalname(const char *relname);
#endif /* TEMPREL_H */ #endif /* TEMPREL_H */