aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/copy.c22
-rw-r--r--src/backend/commands/remove.c9
-rw-r--r--src/backend/commands/trigger.c47
-rw-r--r--src/backend/commands/vacuum.c49
4 files changed, 43 insertions, 84 deletions
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index ead927c34a6..9b5fbda69e8 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -6,7 +6,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.37 1998/01/05 16:38:46 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.38 1998/01/15 19:42:36 pgsql Exp $
*
*-------------------------------------------------------------------------
*/
@@ -202,8 +202,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
int32 attr_count,
i;
AttributeTupleForm *attr;
- func_ptr *out_functions;
- int dummy;
+ FmgrInfo *out_functions;
Oid out_func_oid;
Oid *elements;
Datum value;
@@ -229,12 +228,12 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
if (!binary)
{
- out_functions = (func_ptr *) palloc(attr_count * sizeof(func_ptr));
+ out_functions = (FmgrInfo *) palloc(attr_count * sizeof(FmgrInfo));
elements = (Oid *) palloc(attr_count * sizeof(Oid));
for (i = 0; i < attr_count; i++)
{
out_func_oid = (Oid) GetOutputFunction(attr[i]->atttypid);
- fmgr_info(out_func_oid, &out_functions[i], &dummy);
+ fmgr_info(out_func_oid, &out_functions[i]);
elements[i] = GetTypeElement(attr[i]->atttypid);
}
nulls = NULL; /* meaningless, but compiler doesn't know
@@ -272,7 +271,7 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
{
if (!isnull)
{
- string = (char *) (out_functions[i]) (value, elements[i]);
+ string = (char *) (*fmgr_faddr(&out_functions[i])) (value, elements[i]);
CopyAttributeOut(fp, string, delim);
pfree(string);
}
@@ -357,9 +356,8 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
HeapTuple tuple;
AttrNumber attr_count;
AttributeTupleForm *attr;
- func_ptr *in_functions;
- int i,
- dummy;
+ FmgrInfo *in_functions;
+ int i;
Oid in_func_oid;
Datum *values;
char *nulls,
@@ -498,12 +496,12 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
if (!binary)
{
- in_functions = (func_ptr *) palloc(attr_count * sizeof(func_ptr));
+ in_functions = (FmgrInfo *) palloc(attr_count * sizeof(FmgrInfo));
elements = (Oid *) palloc(attr_count * sizeof(Oid));
for (i = 0; i < attr_count; i++)
{
in_func_oid = (Oid) GetInputFunction(attr[i]->atttypid);
- fmgr_info(in_func_oid, &in_functions[i], &dummy);
+ fmgr_info(in_func_oid, &in_functions[i]);
elements[i] = GetTypeElement(attr[i]->atttypid);
}
}
@@ -574,7 +572,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim)
else
{
values[i] =
- (Datum) (in_functions[i]) (string,
+ (Datum) (*fmgr_faddr(&in_functions[i])) (string,
elements[i],
attr[i]->attlen);
diff --git a/src/backend/commands/remove.c b/src/backend/commands/remove.c
index 3e9dfc02867..cb9a6ea2e46 100644
--- a/src/backend/commands/remove.c
+++ b/src/backend/commands/remove.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.20 1998/01/05 16:38:58 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.21 1998/01/15 19:42:38 pgsql Exp $
*
*-------------------------------------------------------------------------
*/
@@ -277,8 +277,8 @@ RemoveType(char *typeName) /* type name to be removed */
#endif
relation = heap_openr(TypeRelationName);
- fmgr_info(typeKey[0].sk_procedure, &typeKey[0].sk_func,
- &typeKey[0].sk_nargs);
+ fmgr_info(typeKey[0].sk_procedure, &typeKey[0].sk_func);
+ typeKey[0].sk_nargs = typeKey[0].sk_func.fn_nargs;
/* Delete the primary type */
@@ -387,7 +387,8 @@ RemoveFunction(char *functionName, /* function name to be removed */
key[0].sk_argument = PointerGetDatum(functionName);
- fmgr_info(key[0].sk_procedure, &key[0].sk_func, &key[0].sk_nargs);
+ fmgr_info(key[0].sk_procedure, &key[0].sk_func);
+ key[0].sk_nargs = key[0].sk_func.fn_nargs;
relation = heap_openr(ProcedureRelationName);
scan = heap_beginscan(relation, 0, false, 1, key);
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index f7dca4bcf41..33062b911bb 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -43,7 +43,6 @@ static HeapTuple
GetTupleForTrigger(Relation relation, ItemPointer tid,
bool before);
-extern void fmgr_info(Oid procedureId, func_ptr * function, int *nargs);
extern GlobalMemory CacheCxt;
void
@@ -413,8 +412,7 @@ RelationBuildTriggers(Relation relation)
build->tgname = nameout(&(pg_trigger->tgname));
build->tgfoid = pg_trigger->tgfoid;
- build->tgfunc = NULL;
- build->tgplfunc = NULL;
+ build->tgfunc.fn_addr = NULL;
build->tgtype = pg_trigger->tgtype;
build->tgnargs = pg_trigger->tgnargs;
memcpy(build->tgattr, &(pg_trigger->tgattr), 8 * sizeof(int16));
@@ -598,48 +596,17 @@ static HeapTuple
ExecCallTriggerFunc(Trigger * trigger)
{
- if (trigger->tgfunc != NULL)
+ if (trigger->tgfunc.fn_addr == NULL)
{
- return (HeapTuple) ((*(trigger->tgfunc)) ());
+ fmgr_info(trigger->tgfoid, &trigger->tgfunc);
}
- if (trigger->tgplfunc == NULL)
- {
- HeapTuple procTuple;
- HeapTuple langTuple;
- Form_pg_proc procStruct;
- Form_pg_language langStruct;
- int nargs;
-
- procTuple = SearchSysCacheTuple(PROOID,
- ObjectIdGetDatum(trigger->tgfoid),
- 0, 0, 0);
- if (!HeapTupleIsValid(procTuple))
- {
- elog(ERROR, "ExecCallTriggerFunc(): Cache lookup for proc %ld failed",
- ObjectIdGetDatum(trigger->tgfoid));
- }
- procStruct = (Form_pg_proc) GETSTRUCT(procTuple);
-
- langTuple = SearchSysCacheTuple(LANOID,
- ObjectIdGetDatum(procStruct->prolang),
- 0, 0, 0);
- if (!HeapTupleIsValid(langTuple))
- {
- elog(ERROR, "ExecCallTriggerFunc(): Cache lookup for language %ld failed",
- ObjectIdGetDatum(procStruct->prolang));
- }
- langStruct = (Form_pg_language) GETSTRUCT(langTuple);
-
- if (langStruct->lanispl == false)
- {
- fmgr_info(trigger->tgfoid, &(trigger->tgfunc), &nargs);
- return (HeapTuple) ((*(trigger->tgfunc)) ());
- }
- fmgr_info(langStruct->lanplcallfoid, &(trigger->tgplfunc), &nargs);
+ if (trigger->tgfunc.fn_plhandler != NULL) {
+ return (HeapTuple) (*(trigger->tgfunc.fn_plhandler))
+ (&trigger->tgfunc);
}
- return (HeapTuple) ((*(trigger->tgplfunc)) (trigger->tgfoid));
+ return (HeapTuple) ((*fmgr_faddr(&trigger->tgfunc)) ());
}
HeapTuple
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 90d57af2f05..0d19eb51999 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.57 1998/01/05 16:39:05 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.58 1998/01/15 19:42:40 pgsql Exp $
*
*-------------------------------------------------------------------------
*/
@@ -67,9 +67,9 @@ static int MESSAGE_LEVEL; /* message level */
#define swapLong(a,b) {long tmp; tmp=a; a=b; b=tmp;}
#define swapInt(a,b) {int tmp; tmp=a; a=b; b=tmp;}
#define swapDatum(a,b) {Datum tmp; tmp=a; a=b; b=tmp;}
-#define VacAttrStatsEqValid(stats) ( stats->f_cmpeq != NULL )
-#define VacAttrStatsLtGtValid(stats) ( stats->f_cmplt != NULL && \
- stats->f_cmpgt != NULL && \
+#define VacAttrStatsEqValid(stats) ( stats->f_cmpeq.fn_addr != NULL )
+#define VacAttrStatsLtGtValid(stats) ( stats->f_cmplt.fn_addr != NULL && \
+ stats->f_cmpgt.fn_addr != NULL && \
RegProcedureIsValid(stats->outfunc) )
@@ -484,35 +484,29 @@ vc_vacone(Oid relid, bool analyze, List *va_cols)
func_operator = oper("=", stats->attr->atttypid, stats->attr->atttypid, true);
if (func_operator != NULL)
{
- int nargs;
-
pgopform = (OperatorTupleForm) GETSTRUCT(func_operator);
- fmgr_info(pgopform->oprcode, &(stats->f_cmpeq), &nargs);
+ fmgr_info(pgopform->oprcode, &(stats->f_cmpeq));
}
else
- stats->f_cmpeq = NULL;
+ stats->f_cmpeq.fn_addr = NULL;
func_operator = oper("<", stats->attr->atttypid, stats->attr->atttypid, true);
if (func_operator != NULL)
{
- int nargs;
-
pgopform = (OperatorTupleForm) GETSTRUCT(func_operator);
- fmgr_info(pgopform->oprcode, &(stats->f_cmplt), &nargs);
+ fmgr_info(pgopform->oprcode, &(stats->f_cmplt));
}
else
- stats->f_cmplt = NULL;
+ stats->f_cmplt.fn_addr = NULL;
func_operator = oper(">", stats->attr->atttypid, stats->attr->atttypid, true);
if (func_operator != NULL)
{
- int nargs;
-
pgopform = (OperatorTupleForm) GETSTRUCT(func_operator);
- fmgr_info(pgopform->oprcode, &(stats->f_cmpgt), &nargs);
+ fmgr_info(pgopform->oprcode, &(stats->f_cmpgt));
}
else
- stats->f_cmpgt = NULL;
+ stats->f_cmpgt.fn_addr = NULL;
pgttup = SearchSysCacheTuple(TYPOID,
ObjectIdGetDatum(stats->attr->atttypid),
@@ -1671,29 +1665,29 @@ vc_attrstats(Relation onerel, VRelStats *vacrelstats, HeapTuple htup)
}
if (VacAttrStatsLtGtValid(stats))
{
- if ((*(stats->f_cmplt)) (value, stats->min))
+ if ((*fmgr_faddr(&stats->f_cmplt)) (value, stats->min))
{
vc_bucketcpy(stats->attr, value, &stats->min, &stats->min_len);
stats->min_cnt = 0;
}
- if ((*(stats->f_cmpgt)) (value, stats->max))
+ if ((*fmgr_faddr(&stats->f_cmpgt)) (value, stats->max))
{
vc_bucketcpy(stats->attr, value, &stats->max, &stats->max_len);
stats->max_cnt = 0;
}
- if ((*(stats->f_cmpeq)) (value, stats->min))
+ if ((*fmgr_faddr(&stats->f_cmpeq)) (value, stats->min))
stats->min_cnt++;
- else if ((*(stats->f_cmpeq)) (value, stats->max))
+ else if ((*fmgr_faddr(&stats->f_cmpeq)) (value, stats->max))
stats->max_cnt++;
}
- if ((*(stats->f_cmpeq)) (value, stats->best))
+ if ((*fmgr_faddr(&stats->f_cmpeq)) (value, stats->best))
stats->best_cnt++;
- else if ((*(stats->f_cmpeq)) (value, stats->guess1))
+ else if ((*fmgr_faddr(&stats->f_cmpeq)) (value, stats->guess1))
{
stats->guess1_cnt++;
stats->guess1_hits++;
}
- else if ((*(stats->f_cmpeq)) (value, stats->guess2))
+ else if ((*fmgr_faddr(&stats->f_cmpeq)) (value, stats->guess2))
stats->guess2_hits++;
else
value_hit = false;
@@ -1880,9 +1874,8 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
*
pgcform->relname.data) */ )
{
- func_ptr out_function;
+ FmgrInfo out_function;
char *out_string;
- int dummy;
for (i = 0; i < Natts_pg_statistic; ++i)
nulls[i] = ' ';
@@ -1895,11 +1888,11 @@ vc_updstats(Oid relid, int npages, int ntups, bool hasindex, VRelStats *vacrelst
values[i++] = (Datum) relid; /* 1 */
values[i++] = (Datum) attp->attnum; /* 2 */
values[i++] = (Datum) InvalidOid; /* 3 */
- fmgr_info(stats->outfunc, &out_function, &dummy);
- out_string = (*out_function) (stats->min, stats->attr->atttypid);
+ fmgr_info(stats->outfunc, &out_function);
+ out_string = (*fmgr_faddr(&out_function)) (stats->min, stats->attr->atttypid);
values[i++] = (Datum) fmgr(TextInRegProcedure, out_string);
pfree(out_string);
- out_string = (char *) (*out_function) (stats->max, stats->attr->atttypid);
+ out_string = (char *) (*fmgr_faddr(&out_function)) (stats->max, stats->attr->atttypid);
values[i++] = (Datum) fmgr(TextInRegProcedure, out_string);
pfree(out_string);