pgpool2.git / summary / log / commit / refs

commit    b4c0e9afa7a502869e3bb4958d110640e759df4a
Author:   Tatsuo Ishii <ishii at sraoss.co.jp>
Date:     Mon Feb 28 00:50:51 2011 +0000

    Fix pgpool-regclass() to be compiled in PostgreSQL 8.0 or later.
    7.4 still produces errors but I doubt fixing effort is worth the trouble.


sql/pgpool-regclass/pgpool-regclass.c | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/sql/pgpool-regclass/pgpool-regclass.c b/sql/pgpool-regclass/pgpool-regclass.c index f5b9de52a..fc3c815b4 100644 --- a/sql/pgpool-regclass/pgpool-regclass.c +++ b/sql/pgpool-regclass/pgpool-regclass.c @@ -25,6 +25,7 @@ #include <unistd.h> #include "postgres.h" #include "utils/builtins.h" +#include "utils/syscache.h" #include "utils/elog.h" #include "catalog/namespace.h" #include "nodes/makefuncs.h" @@ -50,6 +51,9 @@ MymakeRangeVarFromNameList(List *names); extern Oid MyDatabaseId; +static Oid +get_namespace_oid(const char *nspname, bool missing_ok); + Datum pgpool_regclass(PG_FUNCTION_ARGS) { @@ -86,7 +90,7 @@ pgpool_regclass(PG_FUNCTION_ARGS) */ if (rel->schemaname) { - if (LookupNamespaceNoError(rel->schemaname) == InvalidOid) + if (get_namespace_oid(rel->schemaname, true) == InvalidOid) PG_RETURN_OID(InvalidOid); } @@ -137,7 +141,15 @@ MystringToQualifiedNameList(const char *string) static RangeVar * MymakeRangeVarFromNameList(List *names) { +/* + * Number of arguments of makeRangeVar() has been increased in 8.4 or + * later. + */ +#if PG_VERSION_NUM >= 80400 RangeVar *rel = makeRangeVar(NULL, NULL, -1); +#else + RangeVar *rel = makeRangeVar(NULL, NULL); +#endif switch (list_length(names)) { @@ -160,3 +172,26 @@ MymakeRangeVarFromNameList(List *names) return rel; } + +/* + * get_namespace_oid - given a namespace name, look up the OID + * + * If missing_ok is false, throw an error if namespace name not found. If + * true, just return InvalidOid. + * + * This function was stolen from PostgreSQL 9.0 and modified to not + * use GetSysCacheOid1. Since it is new in 9.0. + */ +static Oid +get_namespace_oid(const char *nspname, bool missing_ok) +{ + Oid oid; + + oid = GetSysCacheOid(NAMESPACENAME, CStringGetDatum(nspname), 0, 0, 0); + if (!OidIsValid(oid) && !missing_ok) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("schema \"%s\" does not exist", nspname))); + + return oid; +} [parent: 3626b888d0dc]