mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Postgres95 1.01 Distribution - Virgin Sources
This commit is contained in:
265
src/backend/utils/Gen_fmgrtab.sh
Normal file
265
src/backend/utils/Gen_fmgrtab.sh
Normal file
@@ -0,0 +1,265 @@
|
||||
#!/bin/sh
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gen_fmgrtab.sh--
|
||||
# shell script to generate fmgr.h and fmgrtab.c from pg_proc.h
|
||||
#
|
||||
# Copyright (c) 1994, Regents of the University of California
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh,v 1.1.1.1 1996/07/09 06:22:00 scrappy Exp $
|
||||
#
|
||||
# NOTES
|
||||
# Passes any -D options on to cpp prior to generating the list
|
||||
# of internal functions. These come from BKIOPTS.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
# cpp is usually in one of these places...
|
||||
PATH=/usr/lib:/lib:/usr/ccs/lib:$PATH
|
||||
|
||||
BKIOPTS=''
|
||||
if [ $? != 0 ]
|
||||
then
|
||||
echo `basename $0`: Bad option
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#
|
||||
# Pass on any -D declarations, throwing away any other command
|
||||
# line switches.
|
||||
#
|
||||
for opt in $*
|
||||
do
|
||||
case $opt in
|
||||
-D) BKIOPTS="$BKIOPTS -D$2"; shift; shift;;
|
||||
-D*) BKIOPTS="$BKIOPTS $1";shift;;
|
||||
--) shift; break;;
|
||||
-*) shift;;
|
||||
esac
|
||||
done
|
||||
|
||||
INFILE=$1
|
||||
RAWFILE=fmgr.raw
|
||||
HFILE=fmgr.h
|
||||
TABCFILE=fmgrtab.c
|
||||
|
||||
#
|
||||
# Generate the file containing raw pg_proc tuple data
|
||||
# (but only for "internal" language procedures...).
|
||||
#
|
||||
# Unlike genbki.sh, which can run through cpp last, we have to
|
||||
# deal with preprocessor statements first (before we sort the
|
||||
# function table by oid).
|
||||
#
|
||||
awk '
|
||||
BEGIN { raw = 0; }
|
||||
/^DATA/ { print; next; }
|
||||
/^BKI_BEGIN/ { raw = 1; next; }
|
||||
/^BKI_END/ { raw = 0; next; }
|
||||
raw == 1 { print; next; }' $INFILE | \
|
||||
sed -e 's/^.*OID[^=]*=[^0-9]*//' \
|
||||
-e 's/(//g' \
|
||||
-e 's/[ ]*).*$//' | \
|
||||
awk '
|
||||
/^#/ { print; next; }
|
||||
$4 == "11" { print; next; }' | \
|
||||
cpp $BKIOPTS | \
|
||||
egrep '^[0-9]' | \
|
||||
sort -n > $RAWFILE
|
||||
|
||||
#
|
||||
# Generate fmgr.h
|
||||
#
|
||||
cat > $HFILE <<FuNkYfMgRsTuFf
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* $HFILE--
|
||||
* Definitions for using internal procedures.
|
||||
*
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: Gen_fmgrtab.sh,v 1.1.1.1 1996/07/09 06:22:00 scrappy Exp $
|
||||
*
|
||||
* NOTES
|
||||
* ******************************
|
||||
* *** DO NOT EDIT THIS FILE! ***
|
||||
* ******************************
|
||||
*
|
||||
* It has been GENERATED by $0
|
||||
* from $1
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef FMGR_H
|
||||
#define FMGR_H
|
||||
|
||||
#include "postgres.h" /* for some prototype typedefs */
|
||||
|
||||
/*
|
||||
* Maximum number of arguments for a built-in function.
|
||||
*
|
||||
* XXX note that you cannot call a function with more than 8
|
||||
* arguments from the user level since the catalogs only
|
||||
* store 8 argument type values for type-checking ...
|
||||
*/
|
||||
#define MAXFMGRARGS 9
|
||||
|
||||
typedef struct {
|
||||
char *data[MAXFMGRARGS];
|
||||
} FmgrValues;
|
||||
|
||||
/*
|
||||
* defined in fmgr.c
|
||||
*/
|
||||
extern char *fmgr_c(func_ptr user_fn, Oid func_id, int n_arguments,
|
||||
FmgrValues *values, bool *isNull);
|
||||
extern void fmgr_info(Oid procedureId, func_ptr *function, int *nargs);
|
||||
extern char *fmgr(Oid procedureId, ... );
|
||||
extern char *fmgr_ptr(func_ptr user_fn, Oid func_id, ... );
|
||||
extern char *fmgr_array_args(Oid procedureId, int nargs,
|
||||
char *args[], bool *isNull);
|
||||
|
||||
/*
|
||||
* defined in dfmgr.c
|
||||
*/
|
||||
extern func_ptr fmgr_dynamic(Oid procedureId, int *pronargs);
|
||||
extern void load_file(char *filename);
|
||||
|
||||
|
||||
/*
|
||||
* For performance reasons, we often want to simply jump through a
|
||||
* a function pointer (if it's valid, that is). These calls have
|
||||
* been macroized so we can run them through a routine that does
|
||||
* sanity-checking (and so we can track them down more easily when
|
||||
* we must).
|
||||
*/
|
||||
#ifdef TRACE_FMGR_PTR
|
||||
#define FMGR_PTR2(FP, FID, ARG1, ARG2) \
|
||||
fmgr_ptr(FP, FID, 2, ARG1, ARG2)
|
||||
#else
|
||||
#define FMGR_PTR2(FP, FID, ARG1, ARG2) \
|
||||
((FP) ? (*((func_ptr)(FP)))(ARG1, ARG2) : fmgr(FID, ARG1, ARG2))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Flags for the builtin oprrest selectivity routines.
|
||||
*/
|
||||
#define SEL_CONSTANT 1 /* constant does not vary (not a parameter) */
|
||||
#define SEL_RIGHT 2 /* constant appears to right of operator */
|
||||
|
||||
FuNkYfMgRsTuFf
|
||||
awk '{ print $2, $1; }' $RAWFILE | \
|
||||
tr '[a-z]' '[A-Z]' | \
|
||||
sed -e 's/^/#define F_/' >> $HFILE
|
||||
cat >> $HFILE <<FuNkYfMgRsTuFf
|
||||
|
||||
#endif /* FMGR_H */
|
||||
FuNkYfMgRsTuFf
|
||||
|
||||
#
|
||||
# Generate fmgr function table file.
|
||||
#
|
||||
# Print out the bogus function declarations, then the table that
|
||||
# refers to them.
|
||||
#
|
||||
cat > $TABCFILE <<FuNkYfMgRtAbStUfF
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* $TABCFILE--
|
||||
* The function manager's table of internal functions.
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/Attic/Gen_fmgrtab.sh,v 1.1.1.1 1996/07/09 06:22:00 scrappy Exp $
|
||||
*
|
||||
* NOTES
|
||||
*
|
||||
* ******************************
|
||||
* *** DO NOT EDIT THIS FILE! ***
|
||||
* ******************************
|
||||
*
|
||||
* It has been GENERATED by $0
|
||||
* from $1
|
||||
*
|
||||
* We lie here to cc about the return type and arguments of the
|
||||
* builtin functions; all ld cares about is the fact that it
|
||||
* will need to resolve an external function reference.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifdef WIN32
|
||||
#include <limits.h>
|
||||
#else
|
||||
# if defined(PORTNAME_BSD44_derived) || defined(PORTNAME_bsdi)
|
||||
# include <machine/limits.h>
|
||||
# define MAXINT INT_MAX
|
||||
# else
|
||||
# include <values.h> /* for MAXINT */
|
||||
# endif /* PORTNAME_BSD44_derived || PORTNAME_bsdi */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include "utils/fmgrtab.h"
|
||||
|
||||
FuNkYfMgRtAbStUfF
|
||||
awk '{ print "extern char *" $2 "();"; }' $RAWFILE >> $TABCFILE
|
||||
cat >> $TABCFILE <<FuNkYfMgRtAbStUfF
|
||||
|
||||
static FmgrCall fmgr_builtins[] = {
|
||||
FuNkYfMgRtAbStUfF
|
||||
awk '{ printf (" {%d , %d , %s, \"%s\" },\n"), $1, $8, $2, $2 }' $RAWFILE >> $TABCFILE
|
||||
cat >> $TABCFILE <<FuNkYfMgRtAbStUfF
|
||||
/* guardian value */
|
||||
#ifndef WIN32
|
||||
{ MAXINT, 0, (func_ptr) NULL }
|
||||
#else
|
||||
{ INT_MAX, 0, (func_ptr) NULL }
|
||||
#endif /* WIN32 */
|
||||
};
|
||||
|
||||
static int fmgr_nbuiltins = (sizeof(fmgr_builtins) / sizeof(FmgrCall)) - 1;
|
||||
|
||||
FmgrCall *fmgr_isbuiltin(Oid id)
|
||||
{
|
||||
register int i;
|
||||
int low = 0;
|
||||
int high = fmgr_nbuiltins;
|
||||
|
||||
low = 0;
|
||||
high = fmgr_nbuiltins;
|
||||
while (low <= high) {
|
||||
i = low + (high - low) / 2;
|
||||
if (id == fmgr_builtins[i].proid)
|
||||
break;
|
||||
else if (id > fmgr_builtins[i].proid)
|
||||
low = i + 1;
|
||||
else
|
||||
high = i - 1;
|
||||
}
|
||||
if (id == fmgr_builtins[i].proid)
|
||||
return(&fmgr_builtins[i]);
|
||||
return((FmgrCall *) NULL);
|
||||
}
|
||||
|
||||
func_ptr fmgr_lookupByName(char *name)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<fmgr_nbuiltins;i++) {
|
||||
if (strcmp(name,fmgr_builtins[i].funcName) == 0)
|
||||
return(fmgr_builtins[i].func);
|
||||
}
|
||||
return((func_ptr) NULL);
|
||||
}
|
||||
|
||||
FuNkYfMgRtAbStUfF
|
||||
|
||||
rm -f $RAWFILE
|
||||
|
||||
# ----------------
|
||||
# all done
|
||||
# ----------------
|
||||
exit 0
|
||||
Reference in New Issue
Block a user