From c298d74d4957845bb03a67092c30b53e5e0d01c2 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 3 Aug 2000 16:35:08 +0000 Subject: [PATCH] More functions updated to new fmgr style --- money, name, tid datatypes. We're reaching the mopup stage here (good thing too, this is getting tedious). --- contrib/spi/timetravel.c | 3 +- src/backend/access/heap/tuptoaster.c | 8 +- src/backend/catalog/heap.c | 13 +- src/backend/commands/command.c | 4 +- src/backend/commands/dbcommands.c | 5 +- src/backend/commands/indexcmds.c | 5 +- src/backend/commands/sequence.c | 6 +- src/backend/commands/trigger.c | 24 ++-- src/backend/commands/user.c | 22 +-- src/backend/optimizer/path/indxpath.c | 4 +- src/backend/parser/analyze.c | 5 +- src/backend/utils/adt/cash.c | 184 ++++++++++++-------------- src/backend/utils/adt/name.c | 98 ++++++++------ src/backend/utils/adt/selfuncs.c | 7 +- src/backend/utils/adt/tid.c | 86 ++++++------ src/backend/utils/init/miscinit.c | 10 +- src/include/catalog/pg_proc.h | 50 +++---- src/include/miscadmin.h | 7 +- src/include/utils/builtins.h | 25 ++-- src/include/utils/cash.h | 24 ++-- src/pl/plpgsql/src/pl_comp.c | 32 +++-- src/pl/plpgsql/src/pl_exec.c | 8 +- 22 files changed, 316 insertions(+), 314 deletions(-) diff --git a/contrib/spi/timetravel.c b/contrib/spi/timetravel.c index 92c2ba92cf..cd50cd8489 100644 --- a/contrib/spi/timetravel.c +++ b/contrib/spi/timetravel.c @@ -368,7 +368,8 @@ set_timetravel(PG_FUNCTION_ARGS) TTOff = malloc(sizeof(char *)); else TTOff = realloc(TTOff, (nTTOff + 1) * sizeof(char *)); - s = rname = nameout(relname); + s = rname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(relname))); d = TTOff[nTTOff] = malloc(strlen(rname) + 1); while (*s) *d++ = tolower(*s++); diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c index bab1185730..61076444a2 100644 --- a/src/backend/access/heap/tuptoaster.c +++ b/src/backend/access/heap/tuptoaster.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.10 2000/07/31 22:39:17 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.11 2000/08/03 16:33:40 tgl Exp $ * * * INTERFACE ROUTINES @@ -785,12 +785,14 @@ toast_save_datum(Relation rel, Oid mainoid, int16 attno, Datum value) toastrel = heap_open(rel->rd_rel->reltoastrelid, RowExclusiveLock); if (toastrel == NULL) elog(ERROR, "Failed to open secondary relation of %s", - nameout(&(rel->rd_rel->relname))); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(rel->rd_rel->relname))))); toasttupDesc = toastrel->rd_att; toastidx = index_open(rel->rd_rel->reltoastidxid); if (toastidx == NULL) elog(ERROR, "Failed to open index for secondary relation of %s", - nameout(&(rel->rd_rel->relname))); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(rel->rd_rel->relname))))); /* ---------- * Split up the item into chunks diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index b5334de15e..6c8c95563f 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.140 2000/07/14 22:17:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.141 2000/08/03 16:33:52 tgl Exp $ * * * INTERFACE ROUTINES @@ -409,8 +409,8 @@ CheckAttributeNames(TupleDesc tupdesc) { for (j = 0; j < (int) (sizeof(HeapAtt) / sizeof(HeapAtt[0])); j++) { - if (nameeq(&(HeapAtt[j]->attname), - &(tupdesc->attrs[i]->attname))) + if (strcmp(NameStr(HeapAtt[j]->attname), + NameStr(tupdesc->attrs[i]->attname)) == 0) { elog(ERROR, "Attribute '%s' has a name conflict" "\n\tName matches an existing system attribute", @@ -433,8 +433,8 @@ CheckAttributeNames(TupleDesc tupdesc) { for (j = 0; j < i; j++) { - if (nameeq(&(tupdesc->attrs[j]->attname), - &(tupdesc->attrs[i]->attname))) + if (strcmp(NameStr(tupdesc->attrs[j]->attname), + NameStr(tupdesc->attrs[i]->attname)) == 0) { elog(ERROR, "Attribute '%s' is repeated", NameStr(tupdesc->attrs[j]->attname)); @@ -1633,7 +1633,8 @@ StoreRelCheck(Relation rel, char *ccname, char *ccbin) ccsrc = deparse_expression(expr, lcons(lcons(rte, NIL), NIL), false); values[Anum_pg_relcheck_rcrelid - 1] = RelationGetRelid(rel); - values[Anum_pg_relcheck_rcname - 1] = PointerGetDatum(namein(ccname)); + values[Anum_pg_relcheck_rcname - 1] = DirectFunctionCall1(namein, + CStringGetDatum(ccname)); values[Anum_pg_relcheck_rcbin - 1] = DirectFunctionCall1(textin, CStringGetDatum(ccbin)); values[Anum_pg_relcheck_rcsrc - 1] = DirectFunctionCall1(textin, diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index 7d21acc16b..3deea360e0 100644 --- a/src/backend/commands/command.c +++ b/src/backend/commands/command.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.91 2000/07/18 03:57:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.92 2000/08/03 16:34:01 tgl Exp $ * * NOTES * The PerformAddAttribute() code, like most of the relation @@ -565,7 +565,7 @@ AlterTableAlterColumn(const char *relationName, */ tuple = SearchSysCacheTuple(ATTNAME, ObjectIdGetDatum(myrelid), - NameGetDatum(namein((char *) colName)), + PointerGetDatum(colName), 0, 0); if (!HeapTupleIsValid(tuple)) diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index bda64842c4..1c2df9c5eb 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.58 2000/07/05 23:11:11 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.59 2000/08/03 16:34:01 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -98,7 +98,8 @@ createdb(const char *dbname, const char *dbpath, int encoding) pg_database_dsc = RelationGetDescr(pg_database_rel); /* Form tuple */ - new_record[Anum_pg_database_datname - 1] = NameGetDatum(namein(dbname)); + new_record[Anum_pg_database_datname - 1] = DirectFunctionCall1(namein, + CStringGetDatum(dbname)); new_record[Anum_pg_database_datdba - 1] = Int32GetDatum(user_id); new_record[Anum_pg_database_encoding - 1] = Int32GetDatum(encoding); new_record[Anum_pg_database_datpath - 1] = DirectFunctionCall1(textin, diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 6ede4f51c1..85de47a676 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.35 2000/07/14 22:17:42 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.36 2000/08/03 16:34:01 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -576,7 +576,8 @@ GetDefaultOpClass(Oid atttypid) if (!HeapTupleIsValid(tuple)) return NULL; - return nameout(&((Form_pg_opclass) GETSTRUCT(tuple))->opcname); + return DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&((Form_pg_opclass) GETSTRUCT(tuple))->opcname))); } /* diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 80fca6a38a..f528abed75 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -201,7 +201,7 @@ nextval(PG_FUNCTION_ARGS) rescnt = 0; #ifndef NO_SECURITY - if (pg_aclcheck(seqname, getpgusername(), ACL_WR) != ACLCHECK_OK) + if (pg_aclcheck(seqname, GetPgUserName(), ACL_WR) != ACLCHECK_OK) elog(ERROR, "%s.nextval: you don't have permissions to set sequence %s", seqname, seqname); #endif @@ -298,7 +298,7 @@ currval(PG_FUNCTION_ARGS) int32 result; #ifndef NO_SECURITY - if (pg_aclcheck(seqname, getpgusername(), ACL_RD) != ACLCHECK_OK) + if (pg_aclcheck(seqname, GetPgUserName(), ACL_RD) != ACLCHECK_OK) elog(ERROR, "%s.currval: you don't have permissions to read sequence %s", seqname, seqname); #endif @@ -328,7 +328,7 @@ setval(PG_FUNCTION_ARGS) Form_pg_sequence seq; #ifndef NO_SECURITY - if (pg_aclcheck(seqname, getpgusername(), ACL_WR) != ACLCHECK_OK) + if (pg_aclcheck(seqname, GetPgUserName(), ACL_WR) != ACLCHECK_OK) elog(ERROR, "%s.setval: you don't have permissions to set sequence %s", seqname, seqname); #endif diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 8abd930b1b..17e61a379f 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.73 2000/07/29 03:26:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.74 2000/08/03 16:34:01 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -195,7 +195,8 @@ CreateTrigger(CreateTrigStmt *stmt) MemSet(nulls, ' ', Natts_pg_trigger * sizeof(char)); values[Anum_pg_trigger_tgrelid - 1] = ObjectIdGetDatum(RelationGetRelid(rel)); - values[Anum_pg_trigger_tgname - 1] = NameGetDatum(namein(stmt->trigname)); + values[Anum_pg_trigger_tgname - 1] = DirectFunctionCall1(namein, + CStringGetDatum(stmt->trigname)); values[Anum_pg_trigger_tgfoid - 1] = ObjectIdGetDatum(funcoid); values[Anum_pg_trigger_tgtype - 1] = Int16GetDatum(tgtype); values[Anum_pg_trigger_tgenabled - 1] = BoolGetDatum(true); @@ -441,7 +442,8 @@ RelationRemoveTriggers(Relation rel) refrel = heap_open(pg_trigger->tgrelid, NoLock); stmt.relname = pstrdup(RelationGetRelationName(refrel)); - stmt.trigname = nameout(&pg_trigger->tgname); + stmt.trigname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&pg_trigger->tgname))); heap_close(refrel, NoLock); @@ -552,7 +554,8 @@ RelationBuildTriggers(Relation relation) build->tgoid = htup->t_data->t_oid; build->tgname = MemoryContextStrdup(CacheMemoryContext, - nameout(&pg_trigger->tgname)); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&pg_trigger->tgname)))); build->tgfoid = pg_trigger->tgfoid; build->tgfunc.fn_oid = InvalidOid; /* mark FmgrInfo as uninitialized */ build->tgtype = pg_trigger->tgtype; @@ -1217,8 +1220,8 @@ deferredTriggerGetPreviousEvent(Oid relid, ItemPointer ctid) } elog(ERROR, - "deferredTriggerGetPreviousEvent(): event for tuple %s not found", - tidout(ctid)); + "deferredTriggerGetPreviousEvent(): event for tuple %s not found", + DatumGetCString(DirectFunctionCall1(tidout, PointerGetDatum(ctid)))); return NULL; } @@ -2020,13 +2023,15 @@ DeferredTriggerSaveEvent(Relation rel, int event, TRIGGER_DEFERRED_ROW_INSERTED) elog(ERROR, "triggered data change violation " "on relation \"%s\"", - nameout(&(rel->rd_rel->relname))); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(rel->rd_rel->relname))))); if (prev_event->dte_item[i].dti_state & TRIGGER_DEFERRED_KEY_CHANGED) elog(ERROR, "triggered data change violation " "on relation \"%s\"", - nameout(&(rel->rd_rel->relname))); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(rel->rd_rel->relname))))); } /* ---------- @@ -2060,7 +2065,8 @@ DeferredTriggerSaveEvent(Relation rel, int event, if (prev_event->dte_event & TRIGGER_DEFERRED_KEY_CHANGED) elog(ERROR, "triggered data change violation " "on relation \"%s\"", - nameout(&(rel->rd_rel->relname))); + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(rel->rd_rel->relname))))); break; } diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 82135e9994..2164c516f9 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/backend/commands/user.c,v 1.65 2000/07/22 04:16:13 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/user.c,v 1.66 2000/08/03 16:34:01 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -121,7 +121,8 @@ write_password_file(Relation rel) "%s" CRYPT_PWD_FILE_SEPSTR "%s\n", - nameout(DatumGetName(datum_n)), + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(DatumGetName(datum_n)))), null_p ? "" : DatumGetCString(DirectFunctionCall1(textout, datum_p)), null_v ? "\\N" : @@ -246,8 +247,8 @@ CreateUser(CreateUserStmt *stmt) /* * Build a tuple to insert */ - new_record[Anum_pg_shadow_usename - 1] = PointerGetDatum(namein(stmt->user)); /* this truncated - * properly */ + new_record[Anum_pg_shadow_usename - 1] = DirectFunctionCall1(namein, + CStringGetDatum(stmt->user)); new_record[Anum_pg_shadow_usesysid - 1] = Int32GetDatum(havesysid ? stmt->sysid : max_id + 1); AssertState(BoolIsValid(stmt->createdb)); @@ -374,7 +375,8 @@ AlterUser(AlterUserStmt *stmt) /* * Build a tuple to update, perusing the information just obtained */ - new_record[Anum_pg_shadow_usename - 1] = PointerGetDatum(namein(stmt->user)); + new_record[Anum_pg_shadow_usename - 1] = DirectFunctionCall1(namein, + CStringGetDatum(stmt->user)); new_record_nulls[Anum_pg_shadow_usename - 1] = ' '; /* sysid - leave as is */ @@ -556,7 +558,9 @@ DropUser(DropUserStmt *stmt) datum = heap_getattr(tmp_tuple, Anum_pg_database_datname, pg_dsc, &null); heap_close(pg_shadow_rel, AccessExclusiveLock); elog(ERROR, "DROP USER: user \"%s\" owns database \"%s\", cannot be removed%s", - user, nameout(DatumGetName(datum)), + user, + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(DatumGetName(datum)))), (length(stmt->users) > 1) ? " (no users removed)" : "" ); } @@ -587,11 +591,9 @@ DropUser(DropUserStmt *stmt) { AlterGroupStmt ags; + /* the group name from which to try to drop the user: */ datum = heap_getattr(tmp_tuple, Anum_pg_group_groname, pg_dsc, &null); - - ags.name = nameout(DatumGetName(datum)); /* the group name from - * which to try to drop - * the user */ + ags.name = DatumGetCString(DirectFunctionCall1(nameout, datum)); ags.action = -1; ags.listUsers = lcons((void *) makeInteger(usesysid), NIL); AlterGroup(&ags, "DROP USER"); diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index a675963005..44305558ab 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.90 2000/07/27 23:15:56 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.91 2000/08/03 16:34:12 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2006,7 +2006,7 @@ string_to_datum(const char *str, Oid datatype) * varchar constants too... */ if (datatype == NAMEOID) - return PointerGetDatum(namein((char *) str)); + return DirectFunctionCall1(namein, CStringGetDatum(str)); else return DirectFunctionCall1(textin, CStringGetDatum(str)); } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index b5305edb54..5824c300d7 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: analyze.c,v 1.151 2000/07/15 00:01:41 tgl Exp $ + * $Id: analyze.c,v 1.152 2000/08/03 16:35:08 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2078,7 +2078,8 @@ transformFkeyGetPrimaryKey(FkConstraint *fkconstraint) int pkattno = indexStruct->indkey[i]; Ident *pkattr = makeNode(Ident); - pkattr->name = nameout(&(pkrel_attrs[pkattno - 1]->attname)); + pkattr->name = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(pkrel_attrs[pkattno - 1]->attname)))); pkattr->indirection = NIL; pkattr->isRel = false; diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index e1a68940a8..d924bf3fe0 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -9,7 +9,7 @@ * workings can be found in the book "Software Solutions in C" by * Dale Schumacher, Academic Press, ISBN: 0-12-632360-7. * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.44 2000/08/01 18:29:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.45 2000/08/03 16:34:22 tgl Exp $ */ #include @@ -66,11 +66,11 @@ CashGetDatum(Cash value) * XXX UNHACK Allow the currency symbol to be multi-byte. * - thomas 1998-03-01 */ -Cash * -cash_in(const char *str) +Datum +cash_in(PG_FUNCTION_ARGS) { - Cash *result; - + char *str = PG_GETARG_CSTRING(0); + Cash result; Cash value = 0; Cash dec = 0; Cash sgn = 1; @@ -200,17 +200,14 @@ cash_in(const char *str) if (*s != '\0') elog(ERROR, "Bad money external representation %s", str); - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't input cash '%s'", str); - - *result = (value * sgn); + result = (value * sgn); #ifdef CASHDEBUG - printf("cashin- result is %d\n", *result); + printf("cashin- result is %d\n", result); #endif - return result; -} /* cash_in() */ + PG_RETURN_CASH(result); +} /* cash_out() @@ -218,10 +215,10 @@ cash_in(const char *str) * XXX HACK This code appears to assume US conventions for * positive-valued amounts. - tgl 97/04/14 */ -const char * -cash_out(Cash *in_value) +Datum +cash_out(PG_FUNCTION_ARGS) { - Cash value = *in_value; + Cash value = PG_GETARG_CASH(0); char *result; char buf[CASH_BUFSZ]; int minus = 0; @@ -323,103 +320,95 @@ cash_out(Cash *in_value) strcpy(result, buf + count); } - return result; -} /* cash_out() */ + PG_RETURN_CSTRING(result); +} -bool -cash_eq(Cash *c1, Cash *c2) +Datum +cash_eq(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 == *c2; -} /* cash_eq() */ + PG_RETURN_BOOL(c1 == c2); +} -bool -cash_ne(Cash *c1, Cash *c2) +Datum +cash_ne(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 != *c2; -} /* cash_ne() */ + PG_RETURN_BOOL(c1 != c2); +} -bool -cash_lt(Cash *c1, Cash *c2) +Datum +cash_lt(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 < *c2; -} /* cash_lt() */ + PG_RETURN_BOOL(c1 < c2); +} -bool -cash_le(Cash *c1, Cash *c2) +Datum +cash_le(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 <= *c2; -} /* cash_le() */ + PG_RETURN_BOOL(c1 <= c2); +} -bool -cash_gt(Cash *c1, Cash *c2) +Datum +cash_gt(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 > *c2; -} /* cash_gt() */ + PG_RETURN_BOOL(c1 > c2); +} -bool -cash_ge(Cash *c1, Cash *c2) +Datum +cash_ge(PG_FUNCTION_ARGS) { - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return FALSE; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); - return *c1 >= *c2; -} /* cash_ge() */ + PG_RETURN_BOOL(c1 >= c2); +} /* cash_pl() * Add two cash values. */ -Cash * -cash_pl(Cash *c1, Cash *c2) +Datum +cash_pl(PG_FUNCTION_ARGS) { - Cash *result; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); + Cash result; - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return NULL; + result = c1 + c2; - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't add cash"); - - *result = (*c1 + *c2); - - return result; -} /* cash_pl() */ + PG_RETURN_CASH(result); +} /* cash_mi() * Subtract two cash values. */ -Cash * -cash_mi(Cash *c1, Cash *c2) +Datum +cash_mi(PG_FUNCTION_ARGS) { - Cash *result; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); + Cash result; - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return NULL; + result = c1 - c2; - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't subtract cash"); - - *result = (*c1 - *c2); - - return result; -} /* cash_mi() */ + PG_RETURN_CASH(result); +} /* cash_mul_flt8() @@ -626,41 +615,32 @@ cash_div_int2(PG_FUNCTION_ARGS) /* cashlarger() * Return larger of two cash values. */ -Cash * -cashlarger(Cash *c1, Cash *c2) +Datum +cashlarger(PG_FUNCTION_ARGS) { - Cash *result; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); + Cash result; - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return NULL; - - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't return larger cash"); - - *result = ((*c1 > *c2) ? *c1 : *c2); - - return result; -} /* cashlarger() */ + result = (c1 > c2) ? c1 : c2; + PG_RETURN_CASH(result); +} /* cashsmaller() * Return smaller of two cash values. */ -Cash * -cashsmaller(Cash *c1, Cash *c2) +Datum +cashsmaller(PG_FUNCTION_ARGS) { - Cash *result; + Cash c1 = PG_GETARG_CASH(0); + Cash c2 = PG_GETARG_CASH(1); + Cash result; - if (!PointerIsValid(c1) || !PointerIsValid(c2)) - return NULL; + result = (c1 < c2) ? c1 : c2; - if (!PointerIsValid(result = palloc(sizeof(Cash)))) - elog(ERROR, "Memory allocation failed, can't return smaller cash"); - - *result = ((*c1 < *c2) ? *c1 : *c2); - - return result; -} /* cashsmaller() */ + PG_RETURN_CASH(result); +} /* cash_words() diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c index 630070ce3b..3acf40e0d4 100644 --- a/src/backend/utils/adt/name.c +++ b/src/backend/utils/adt/name.c @@ -12,11 +12,13 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.28 2000/04/12 17:15:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.29 2000/08/03 16:34:22 tgl Exp $ * *------------------------------------------------------------------------- */ #include "postgres.h" + +#include "miscadmin.h" #include "utils/builtins.h" /***************************************************************************** @@ -31,14 +33,13 @@ * [Old] Currently if strlen(s) < NAMEDATALEN, the extra chars are nulls * Now, always NULL terminated */ -NameData * -namein(const char *s) +Datum +namein(PG_FUNCTION_ARGS) { + char *s = PG_GETARG_CSTRING(0); NameData *result; int len; - if (s == NULL) - return NULL; result = (NameData *) palloc(NAMEDATALEN); /* always keep it null-padded */ StrNCpy(NameStr(*result), s, NAMEDATALEN); @@ -48,19 +49,18 @@ namein(const char *s) *(NameStr(*result) + len) = '\0'; len++; } - return result; + PG_RETURN_NAME(result); } /* - * nameout - converts internal reprsentation to "..." + * nameout - converts internal representation to "..." */ -char * -nameout(const NameData *s) +Datum +nameout(PG_FUNCTION_ARGS) { - if (s == NULL) - return "-"; - else - return pstrdup(NameStr(*s)); + Name s = PG_GETARG_NAME(0); + + PG_RETURN_CSTRING(pstrdup(NameStr(*s))); } @@ -82,57 +82,67 @@ nameout(const NameData *s) * namege - returns 1 iff a <= b * */ -bool -nameeq(const NameData *arg1, const NameData *arg2) +Datum +nameeq(PG_FUNCTION_ARGS) { - if (!arg1 || !arg2) - return 0; - else - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) == 0); + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); + + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) == 0); } -bool -namene(const NameData *arg1, const NameData *arg2) +Datum +namene(PG_FUNCTION_ARGS) { - if (arg1 == NULL || arg2 == NULL) - return (bool) 0; - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) != 0); + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); + + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) != 0); } -bool -namelt(const NameData *arg1, const NameData *arg2) +Datum +namelt(PG_FUNCTION_ARGS) { - if (arg1 == NULL || arg2 == NULL) - return (bool) 0; - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) < 0); + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); + + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) < 0); } -bool -namele(const NameData *arg1, const NameData *arg2) +Datum +namele(PG_FUNCTION_ARGS) { - if (arg1 == NULL || arg2 == NULL) - return (bool) 0; - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) <= 0); + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); + + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) <= 0); } -bool -namegt(const NameData *arg1, const NameData *arg2) +Datum +namegt(PG_FUNCTION_ARGS) { - if (arg1 == NULL || arg2 == NULL) - return (bool) 0; + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) > 0); + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) > 0); } -bool -namege(const NameData *arg1, const NameData *arg2) +Datum +namege(PG_FUNCTION_ARGS) { - if (arg1 == NULL || arg2 == NULL) - return (bool) 0; + Name arg1 = PG_GETARG_NAME(0); + Name arg2 = PG_GETARG_NAME(1); - return (bool) (strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) >= 0); + PG_RETURN_BOOL(strncmp(NameStr(*arg1), NameStr(*arg2), NAMEDATALEN) >= 0); } +/* SQL-function interface to GetPgUserName() */ +Datum +getpgusername(PG_FUNCTION_ARGS) +{ + PG_RETURN_DATUM(DirectFunctionCall1(namein, + CStringGetDatum(GetPgUserName()))); +} /* (see char.c for comparison/operation routines) */ diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 16b7964392..e31860c4d3 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.77 2000/08/03 00:58:22 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.78 2000/08/03 16:34:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1889,7 +1889,8 @@ string_lessthan(const char *str1, const char *str2, Oid datatype) break; case NAMEOID: - result = namelt((NameData *) datum1, (NameData *) datum2); + result = DatumGetBool(DirectFunctionCall2(namelt, + datum1, datum2)); break; default: @@ -1933,7 +1934,7 @@ string_to_datum(const char *str, Oid datatype) * varchar constants too... */ if (datatype == NAMEOID) - return PointerGetDatum(namein((char *) str)); + return DirectFunctionCall1(namein, CStringGetDatum(str)); else return DirectFunctionCall1(textin, CStringGetDatum(str)); } diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c index 7d0f4447c2..0f7bd5f915 100644 --- a/src/backend/utils/adt/tid.c +++ b/src/backend/utils/adt/tid.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.21 2000/07/05 23:11:35 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.22 2000/08/03 16:34:23 tgl Exp $ * * NOTES * input routine largely stolen from boxin(). @@ -21,6 +21,11 @@ #include "access/heapam.h" #include "utils/builtins.h" +#define DatumGetItemPointer(X) ((ItemPointer) DatumGetPointer(X)) +#define ItemPointerGetDatum(X) PointerGetDatum(X) +#define PG_GETARG_ITEMPOINTER(n) DatumGetItemPointer(PG_GETARG_DATUM(n)) +#define PG_RETURN_ITEMPOINTER(x) return ItemPointerGetDatum(x) + #define LDELIM '(' #define RDELIM ')' #define DELIM ',' @@ -30,30 +35,23 @@ * tidin * ---------------------------------------------------------------- */ -ItemPointer -tidin(const char *str) +Datum +tidin(PG_FUNCTION_ARGS) { - const char *p, + char *str = PG_GETARG_CSTRING(0); + char *p, *coord[NTIDARGS]; int i; ItemPointer result; - BlockNumber blockNumber; OffsetNumber offsetNumber; - if (str == NULL) - return NULL; - for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++) if (*p == DELIM || (*p == LDELIM && !i)) coord[i++] = p + 1; - /* if (i < NTIDARGS - 1) */ if (i < NTIDARGS) - { - elog(ERROR, "%s invalid tid format", str); - return NULL; - } + elog(ERROR, "invalid tid format: '%s'", str); blockNumber = (BlockNumber) atoi(coord[0]); offsetNumber = (OffsetNumber) atoi(coord[1]); @@ -62,67 +60,61 @@ tidin(const char *str) ItemPointerSet(result, blockNumber, offsetNumber); - return result; + PG_RETURN_ITEMPOINTER(result); } /* ---------------------------------------------------------------- * tidout * ---------------------------------------------------------------- */ -char * -tidout(ItemPointer itemPtr) +Datum +tidout(PG_FUNCTION_ARGS) { + ItemPointer itemPtr = PG_GETARG_ITEMPOINTER(0); + BlockId blockId; BlockNumber blockNumber; OffsetNumber offsetNumber; - BlockId blockId; char buf[32]; - char *str; static char *invalidTid = "()"; - if (!itemPtr || !ItemPointerIsValid(itemPtr)) - { - str = palloc(strlen(invalidTid)); - strcpy(str, invalidTid); - return str; - } + if (!ItemPointerIsValid(itemPtr)) + PG_RETURN_CSTRING(pstrdup(invalidTid)); blockId = &(itemPtr->ip_blkid); blockNumber = BlockIdGetBlockNumber(blockId); offsetNumber = itemPtr->ip_posid; - sprintf(buf, "(%d,%d)", blockNumber, offsetNumber); + sprintf(buf, "(%d,%d)", (int) blockNumber, (int) offsetNumber); - str = (char *) palloc(strlen(buf) + 1); - strcpy(str, buf); - - return str; + PG_RETURN_CSTRING(pstrdup(buf)); } /***************************************************************************** * PUBLIC ROUTINES * *****************************************************************************/ -bool -tideq(ItemPointer arg1, ItemPointer arg2) +Datum +tideq(PG_FUNCTION_ARGS) { - if ((!arg1) || (!arg2)) - return false; + ItemPointer arg1 = PG_GETARG_ITEMPOINTER(0); + ItemPointer arg2 = PG_GETARG_ITEMPOINTER(1); - return (BlockIdGetBlockNumber(&(arg1->ip_blkid)) == - BlockIdGetBlockNumber(&(arg2->ip_blkid)) && - arg1->ip_posid == arg2->ip_posid); + PG_RETURN_BOOL(BlockIdGetBlockNumber(&(arg1->ip_blkid)) == + BlockIdGetBlockNumber(&(arg2->ip_blkid)) && + arg1->ip_posid == arg2->ip_posid); } #ifdef NOT_USED -bool -tidne(ItemPointer arg1, ItemPointer arg2) +Datum +tidne(PG_FUNCTION_ARGS) { - if ((!arg1) || (!arg2)) - return false; - return (BlockIdGetBlockNumber(&(arg1->ip_blkid)) != - BlockIdGetBlockNumber(&(arg2->ip_blkid)) || - arg1->ip_posid != arg2->ip_posid); + ItemPointer arg1 = PG_GETARG_ITEMPOINTER(0); + ItemPointer arg2 = PG_GETARG_ITEMPOINTER(1); + + PG_RETURN_BOOL(BlockIdGetBlockNumber(&(arg1->ip_blkid)) != + BlockIdGetBlockNumber(&(arg2->ip_blkid)) || + arg1->ip_posid != arg2->ip_posid); } #endif @@ -135,7 +127,7 @@ Datum currtid_byreloid(PG_FUNCTION_ARGS) { Oid reloid = PG_GETARG_OID(0); - ItemPointer tid = (ItemPointer) PG_GETARG_POINTER(1); + ItemPointer tid = PG_GETARG_ITEMPOINTER(1); ItemPointer result, ret; Relation rel; @@ -152,14 +144,14 @@ currtid_byreloid(PG_FUNCTION_ARGS) else elog(ERROR, "Relation %u not found", reloid); - PG_RETURN_POINTER(result); + PG_RETURN_ITEMPOINTER(result); } Datum currtid_byrelname(PG_FUNCTION_ARGS) { text *relname = PG_GETARG_TEXT_P(0); - ItemPointer tid = (ItemPointer) PG_GETARG_POINTER(1); + ItemPointer tid = PG_GETARG_ITEMPOINTER(1); ItemPointer result, ret; char *str; @@ -182,5 +174,5 @@ currtid_byrelname(PG_FUNCTION_ARGS) pfree(str); - PG_RETURN_POINTER(result); + PG_RETURN_ITEMPOINTER(result); } diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index b4ad59af6f..01182c765a 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.52 2000/07/14 16:41:44 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.53 2000/08/03 16:34:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -277,20 +277,16 @@ convertstr(unsigned char *buff, int len, int dest) * * SetPgUserName must be called before InitPostgres, since the setuid() * is done there. - * - * Replace GetPgUserName() with a lower-case version - * to allow use in new case-insensitive SQL (referenced - * in pg_proc.h). Define GetPgUserName() as a macro - tgl 97/04/26 * ---------------- */ char * -getpgusername() +GetPgUserName(void) { return UserName; } void -SetPgUserName() +SetPgUserName(void) { #ifndef NO_SECURITY char *p; diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 42e99039c7..8556c83f53 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.155 2000/08/01 18:29:30 tgl Exp $ + * $Id: pg_proc.h,v 1.156 2000/08/03 16:34:31 tgl Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -109,9 +109,9 @@ DATA(insert OID = 1245 ( charin PGUID 12 f t t t 1 f 18 "0" 100 0 0 100 ch DESCR("(internal)"); DATA(insert OID = 33 ( charout PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 charout - )); DESCR("(internal)"); -DATA(insert OID = 34 ( namein PGUID 11 f t t t 1 f 19 "0" 100 0 0 100 namein - )); +DATA(insert OID = 34 ( namein PGUID 12 f t t t 1 f 19 "0" 100 0 0 100 namein - )); DESCR("(internal)"); -DATA(insert OID = 35 ( nameout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 nameout - )); +DATA(insert OID = 35 ( nameout PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 nameout - )); DESCR("(internal)"); DATA(insert OID = 38 ( int2in PGUID 12 f t t t 1 f 21 "0" 100 0 0 100 int2in - )); DESCR("(internal)"); @@ -133,9 +133,9 @@ DATA(insert OID = 46 ( textin PGUID 12 f t t t 1 f 25 "0" 100 0 0 100 te DESCR("(internal)"); DATA(insert OID = 47 ( textout PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 textout - )); DESCR("(internal)"); -DATA(insert OID = 48 ( tidin PGUID 11 f t t t 1 f 27 "0" 100 0 0 100 tidin - )); +DATA(insert OID = 48 ( tidin PGUID 12 f t t t 1 f 27 "0" 100 0 0 100 tidin - )); DESCR("(internal)"); -DATA(insert OID = 49 ( tidout PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 tidout - )); +DATA(insert OID = 49 ( tidout PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 tidout - )); DESCR("(internal)"); DATA(insert OID = 50 ( xidin PGUID 12 f t t t 1 f 28 "0" 100 0 0 100 xidin - )); DESCR("(internal)"); @@ -157,7 +157,7 @@ DATA(insert OID = 60 ( booleq PGUID 12 f t t t 2 f 16 "16 16" 100 0 0 100 DESCR("equal"); DATA(insert OID = 61 ( chareq PGUID 12 f t t t 2 f 16 "18 18" 100 0 0 100 chareq - )); DESCR("equal"); -DATA(insert OID = 62 ( nameeq PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 nameeq - )); +DATA(insert OID = 62 ( nameeq PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 nameeq - )); DESCR("equal"); DATA(insert OID = 63 ( int2eq PGUID 12 f t t t 2 f 16 "21 21" 100 0 0 100 int2eq - )); DESCR("equal"); @@ -896,15 +896,15 @@ DATA(insert OID = 1287 ( int44in PGUID 12 f t t t 1 f 22 "0" 100 0 0 100 i DESCR("(internal)"); DATA(insert OID = 653 ( int44out PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 int44out - )); DESCR("(internal)"); -DATA(insert OID = 655 ( namelt PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namelt - )); +DATA(insert OID = 655 ( namelt PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 namelt - )); DESCR("less-than"); -DATA(insert OID = 656 ( namele PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namele - )); +DATA(insert OID = 656 ( namele PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 namele - )); DESCR("less-than-or-equal"); -DATA(insert OID = 657 ( namegt PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namegt - )); +DATA(insert OID = 657 ( namegt PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 namegt - )); DESCR("greater-than"); -DATA(insert OID = 658 ( namege PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namege - )); +DATA(insert OID = 658 ( namege PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 namege - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 659 ( namene PGUID 11 f t t t 2 f 16 "19 19" 100 0 0 100 namene - )); +DATA(insert OID = 659 ( namene PGUID 12 f t t t 2 f 16 "19 19" 100 0 0 100 namene - )); DESCR("not equal"); DATA(insert OID = 668 ( bpchar PGUID 12 f t t t 2 f 1042 "1042 23" 100 0 0 100 bpchar - )); @@ -928,7 +928,7 @@ DATA(insert OID = 681 ( oidvectorgt PGUID 12 f t t t 2 f 16 "30 30" 100 0 0 DESCR("greater-than"); /* OIDS 700 - 799 */ -DATA(insert OID = 710 ( getpgusername PGUID 11 f t f t 0 f 19 "0" 100 0 0 100 getpgusername - )); +DATA(insert OID = 710 ( getpgusername PGUID 12 f t f t 0 f 19 "0" 100 0 0 100 getpgusername - )); DESCR("Return username"); DATA(insert OID = 711 ( userfntest PGUID 12 f t t t 1 f 23 "23" 100 0 0 100 userfntest - )); DESCR(""); @@ -1108,35 +1108,35 @@ DESCR("multiply"); DATA(insert OID = 867 ( cash_div_int2 PGUID 12 f t t t 2 f 790 "790 21" 100 0 0 100 cash_div_int2 - )); DESCR("divide"); -DATA(insert OID = 886 ( cash_in PGUID 11 f t t t 1 f 790 "0" 100 0 0 100 cash_in - )); +DATA(insert OID = 886 ( cash_in PGUID 12 f t t t 1 f 790 "0" 100 0 0 100 cash_in - )); DESCR("(internal)"); -DATA(insert OID = 887 ( cash_out PGUID 11 f t t t 1 f 23 "0" 100 0 0 100 cash_out - )); +DATA(insert OID = 887 ( cash_out PGUID 12 f t t t 1 f 23 "0" 100 0 0 100 cash_out - )); DESCR("(internal)"); DATA(insert OID = 1273 ( cash_words PGUID 12 f t t t 1 f 25 "790" 100 0 0 100 cash_words - )); DESCR("output amount as words"); -DATA(insert OID = 888 ( cash_eq PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_eq - )); +DATA(insert OID = 888 ( cash_eq PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_eq - )); DESCR("equal"); -DATA(insert OID = 889 ( cash_ne PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ne - )); +DATA(insert OID = 889 ( cash_ne PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ne - )); DESCR("not equal"); -DATA(insert OID = 890 ( cash_lt PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_lt - )); +DATA(insert OID = 890 ( cash_lt PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_lt - )); DESCR("less-than"); -DATA(insert OID = 891 ( cash_le PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_le - )); +DATA(insert OID = 891 ( cash_le PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_le - )); DESCR("less-than-or-equal"); -DATA(insert OID = 892 ( cash_gt PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_gt - )); +DATA(insert OID = 892 ( cash_gt PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_gt - )); DESCR("greater-than"); -DATA(insert OID = 893 ( cash_ge PGUID 11 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ge - )); +DATA(insert OID = 893 ( cash_ge PGUID 12 f t t t 2 f 16 "790 790" 100 0 0 100 cash_ge - )); DESCR("greater-than-or-equal"); -DATA(insert OID = 894 ( cash_pl PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_pl - )); +DATA(insert OID = 894 ( cash_pl PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100 cash_pl - )); DESCR("add"); -DATA(insert OID = 895 ( cash_mi PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cash_mi - )); +DATA(insert OID = 895 ( cash_mi PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100 cash_mi - )); DESCR("subtract"); DATA(insert OID = 896 ( cash_mul_flt8 PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100 cash_mul_flt8 - )); DESCR("multiply"); DATA(insert OID = 897 ( cash_div_flt8 PGUID 12 f t t t 2 f 790 "790 701" 100 0 0 100 cash_div_flt8 - )); DESCR("divide"); -DATA(insert OID = 898 ( cashlarger PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashlarger - )); +DATA(insert OID = 898 ( cashlarger PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100 cashlarger - )); DESCR("larger of two"); -DATA(insert OID = 899 ( cashsmaller PGUID 11 f t t t 2 f 790 "790 790" 100 0 0 100 cashsmaller - )); +DATA(insert OID = 899 ( cashsmaller PGUID 12 f t t t 2 f 790 "790 790" 100 0 0 100 cashsmaller - )); DESCR("smaller of two"); DATA(insert OID = 919 ( flt8_mul_cash PGUID 12 f t t t 2 f 790 "701 790" 100 0 0 100 flt8_mul_cash - )); @@ -1520,7 +1520,7 @@ DESCR("adjust char()[] to typmod length"); DATA(insert OID = 1291 ( _varchar PGUID 12 f t t t 2 f 1015 "1015 23" 100 0 0 100 _varchar - )); DESCR("adjust varchar()[] to typmod length"); -DATA(insert OID = 1292 ( tideq PGUID 11 f t f t 2 f 16 "27 27" 100 0 0 100 tideq - )); +DATA(insert OID = 1292 ( tideq PGUID 12 f t f t 2 f 16 "27 27" 100 0 0 100 tideq - )); DESCR("equal"); DATA(insert OID = 1293 ( currtid PGUID 12 f t f t 2 f 27 "26 27" 100 0 0 100 currtid_byreloid - )); DESCR("latest tid of a tuple"); diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h index 7bc96c9f76..83ad67602c 100644 --- a/src/include/miscadmin.h +++ b/src/include/miscadmin.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: miscadmin.h,v 1.63 2000/07/09 13:14:13 petere Exp $ + * $Id: miscadmin.h,v 1.64 2000/08/03 16:34:43 tgl Exp $ * * NOTES * some of the information in this file will be moved to @@ -129,16 +129,13 @@ extern char *ExpandDatabasePath(const char *path); extern void SetDatabaseName(const char *name); extern void SetDatabasePath(const char *path); -extern char *getpgusername(void); +extern char *GetPgUserName(void); extern void SetPgUserName(void); extern int GetUserId(void); extern void SetUserId(void); extern int FindExec(char *full_path, const char *argv0, const char *binary_name); extern int CheckPathAccess(char *path, char *name, int open_mode); -/* lower case version for case-insensitive SQL referenced in pg_proc.h */ -#define GetPgUserName() getpgusername() - /***************************************************************************** * pmod.h -- * * POSTGRES processing mode definitions. * diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 862cea230c..bb48316413 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.128 2000/08/01 18:29:31 tgl Exp $ + * $Id: builtins.h,v 1.129 2000/08/03 16:34:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -128,14 +128,15 @@ extern Datum int4larger(PG_FUNCTION_ARGS); extern Datum int4smaller(PG_FUNCTION_ARGS); /* name.c */ -extern NameData *namein(const char *s); -extern char *nameout(const NameData *s); -extern bool nameeq(const NameData *arg1, const NameData *arg2); -extern bool namene(const NameData *arg1, const NameData *arg2); -extern bool namelt(const NameData *arg1, const NameData *arg2); -extern bool namele(const NameData *arg1, const NameData *arg2); -extern bool namegt(const NameData *arg1, const NameData *arg2); -extern bool namege(const NameData *arg1, const NameData *arg2); +extern Datum namein(PG_FUNCTION_ARGS); +extern Datum nameout(PG_FUNCTION_ARGS); +extern Datum nameeq(PG_FUNCTION_ARGS); +extern Datum namene(PG_FUNCTION_ARGS); +extern Datum namelt(PG_FUNCTION_ARGS); +extern Datum namele(PG_FUNCTION_ARGS); +extern Datum namegt(PG_FUNCTION_ARGS); +extern Datum namege(PG_FUNCTION_ARGS); +extern Datum getpgusername(PG_FUNCTION_ARGS); extern int namecpy(Name n1, Name n2); extern int namestrcpy(Name name, const char *str); extern int namestrcmp(Name name, const char *str); @@ -357,9 +358,9 @@ extern Pattern_Prefix_Status pattern_fixed_prefix(char *patt, extern char *make_greater_string(const char *str, Oid datatype); /* tid.c */ -extern ItemPointer tidin(const char *str); -extern char *tidout(ItemPointer itemPtr); -extern bool tideq(ItemPointer, ItemPointer); +extern Datum tidin(PG_FUNCTION_ARGS); +extern Datum tidout(PG_FUNCTION_ARGS); +extern Datum tideq(PG_FUNCTION_ARGS); extern Datum currtid_byreloid(PG_FUNCTION_ARGS); extern Datum currtid_byrelname(PG_FUNCTION_ARGS); diff --git a/src/include/utils/cash.h b/src/include/utils/cash.h index 4a5829b090..07897fb0a5 100644 --- a/src/include/utils/cash.h +++ b/src/include/utils/cash.h @@ -12,18 +12,18 @@ /* if we store this as 4 bytes, we better make it int, not long, bjm */ typedef signed int Cash; -extern const char *cash_out(Cash *value); -extern Cash *cash_in(const char *str); +extern Datum cash_in(PG_FUNCTION_ARGS); +extern Datum cash_out(PG_FUNCTION_ARGS); -extern bool cash_eq(Cash *c1, Cash *c2); -extern bool cash_ne(Cash *c1, Cash *c2); -extern bool cash_lt(Cash *c1, Cash *c2); -extern bool cash_le(Cash *c1, Cash *c2); -extern bool cash_gt(Cash *c1, Cash *c2); -extern bool cash_ge(Cash *c1, Cash *c2); +extern Datum cash_eq(PG_FUNCTION_ARGS); +extern Datum cash_ne(PG_FUNCTION_ARGS); +extern Datum cash_lt(PG_FUNCTION_ARGS); +extern Datum cash_le(PG_FUNCTION_ARGS); +extern Datum cash_gt(PG_FUNCTION_ARGS); +extern Datum cash_ge(PG_FUNCTION_ARGS); -extern Cash *cash_pl(Cash *c1, Cash *c2); -extern Cash *cash_mi(Cash *c1, Cash *c2); +extern Datum cash_pl(PG_FUNCTION_ARGS); +extern Datum cash_mi(PG_FUNCTION_ARGS); extern Datum cash_mul_flt8(PG_FUNCTION_ARGS); extern Datum cash_div_flt8(PG_FUNCTION_ARGS); @@ -41,8 +41,8 @@ extern Datum cash_mul_int2(PG_FUNCTION_ARGS); extern Datum int2_mul_cash(PG_FUNCTION_ARGS); extern Datum cash_div_int2(PG_FUNCTION_ARGS); -extern Cash *cashlarger(Cash *c1, Cash *c2); -extern Cash *cashsmaller(Cash *c1, Cash *c2); +extern Datum cashlarger(PG_FUNCTION_ARGS); +extern Datum cashsmaller(PG_FUNCTION_ARGS); extern Datum cash_words(PG_FUNCTION_ARGS); diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index f18caa8464..cc4196fb1e 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -3,7 +3,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.21 2000/07/05 23:11:58 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.22 2000/08/03 16:34:57 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -145,7 +145,8 @@ plpgsql_compile(Oid fn_oid, int functype) proc_source = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(&procStruct->prosrc))); plpgsql_setinput(proc_source, functype); - plpgsql_error_funcname = nameout(&(procStruct->proname)); + plpgsql_error_funcname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(procStruct->proname)))); plpgsql_error_lineno = 0; /* ---------- @@ -158,7 +159,8 @@ plpgsql_compile(Oid fn_oid, int functype) function->fn_functype = functype; function->fn_oid = fn_oid; - function->fn_name = strdup(nameout(&(procStruct->proname))); + function->fn_name = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(procStruct->proname)))); switch (functype) { @@ -224,7 +226,9 @@ plpgsql_compile(Oid fn_oid, int functype) * of that type * ---------- */ - sprintf(buf, "%s%%rowtype", nameout(&(typeStruct->typname))); + sprintf(buf, "%s%%rowtype", + DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(typeStruct->typname))))); if (plpgsql_parse_wordrowtype(buf) != T_ROW) { plpgsql_comperrinfo(); @@ -256,7 +260,8 @@ plpgsql_compile(Oid fn_oid, int functype) var->dtype = PLPGSQL_DTYPE_VAR; var->refname = strdup(buf); var->lineno = 0; - var->datatype->typname = strdup(nameout(&(typeStruct->typname))); + var->datatype->typname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(typeStruct->typname)))); var->datatype->typoid = procStruct->proargtypes[i]; fmgr_info(typeStruct->typinput, &(var->datatype->typinput)); var->datatype->typelem = typeStruct->typelem; @@ -619,7 +624,8 @@ plpgsql_parse_word(char *word) typ = (PLpgSQL_type *) malloc(sizeof(PLpgSQL_type)); - typ->typname = strdup(nameout(&(typeStruct->typname))); + typ->typname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(typeStruct->typname)))); typ->typoid = typeTup->t_data->t_oid; fmgr_info(typeStruct->typinput, &(typ->typinput)); typ->typelem = typeStruct->typelem; @@ -943,7 +949,8 @@ plpgsql_parse_wordtype(char *word) typ = (PLpgSQL_type *) malloc(sizeof(PLpgSQL_type)); - typ->typname = strdup(nameout(&(typeStruct->typname))); + typ->typname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(typeStruct->typname)))); typ->typoid = typeTup->t_data->t_oid; fmgr_info(typeStruct->typinput, &(typ->typinput)); typ->typelem = typeStruct->typelem; @@ -1088,7 +1095,8 @@ plpgsql_parse_dblwordtype(char *string) typ = (PLpgSQL_type *) malloc(sizeof(PLpgSQL_type)); - typ->typname = strdup(nameout(&(typeStruct->typname))); + typ->typname = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(typeStruct->typname)))); typ->typoid = typetup->t_data->t_oid; fmgr_info(typeStruct->typinput, &(typ->typinput)); typ->typelem = typeStruct->typelem; @@ -1187,19 +1195,19 @@ plpgsql_parse_wordrowtype(char *string) } attrStruct = (Form_pg_attribute) GETSTRUCT(attrtup); + cp = DatumGetCString(DirectFunctionCall1(nameout, + NameGetDatum(&(attrStruct->attname)))); + typetup = SearchSysCacheTuple(TYPEOID, ObjectIdGetDatum(attrStruct->atttypid), 0, 0, 0); if (!HeapTupleIsValid(typetup)) { plpgsql_comperrinfo(); elog(ERROR, "cache lookup for type %u of %s.%s failed", - attrStruct->atttypid, word1, - nameout(&(attrStruct->attname))); + attrStruct->atttypid, word1, cp); } typeStruct = (Form_pg_type) GETSTRUCT(typetup); - cp = strdup(nameout(&(attrStruct->attname))); - /* ---------- * Create the internal variable * We know if the table definitions contain a default value diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 8268299f2f..1f54890e5c 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -3,7 +3,7 @@ * procedural language * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.25 2000/07/12 02:37:39 tgl Exp $ + * $Header: /cvsroot/pgsql/src/pl/plpgsql/src/pl_exec.c,v 1.26 2000/08/03 16:34:57 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -637,7 +637,8 @@ plpgsql_exec_trigger(PLpgSQL_function * func, */ var = (PLpgSQL_var *) (estate.datums[func->tg_name_varno]); var->isnull = false; - var->value = (Datum) namein(trigdata->tg_trigger->tgname); + var->value = DirectFunctionCall1(namein, + CStringGetDatum(trigdata->tg_trigger->tgname)); var = (PLpgSQL_var *) (estate.datums[func->tg_when_varno]); var->isnull = false; @@ -663,7 +664,8 @@ plpgsql_exec_trigger(PLpgSQL_function * func, var = (PLpgSQL_var *) (estate.datums[func->tg_relname_varno]); var->isnull = false; - var->value = (Datum) namein(RelationGetRelationName(trigdata->tg_relation)); + var->value = DirectFunctionCall1(namein, + CStringGetDatum(RelationGetRelationName(trigdata->tg_relation))); var = (PLpgSQL_var *) (estate.datums[func->tg_nargs_varno]); var->isnull = false;