Also quickly added mention that it may be a qualified schema name.
Rod Taylor
test=# \x
Expanded display is on.
-test=# select * from pgstattuple('pg_proc');
+test=# select * from pgstattuple('pg_catalog.pg_proc');
-[ RECORD 1 ]------+-------
table_len | 458752
tuple_count | 1470
CREATE OR REPLACE FUNCTION pgstattuple(text) RETURNS pgstattuple_type
AS 'MODULE_PATHNAME', 'pgstattuple'
- LANGUAGE 'c' WITH (isstrict);
+ LANGUAGE 'c' STRICT;
- The argument is the table name. Note that pgstattuple only returns
+ CREATE OR REPLACE FUNCTION pgstattuple(oid) RETURNS pgstattuple_type
+ AS 'MODULE_PATHNAME', 'pgstattuplebyid'
+ LANGUAGE 'c' STRICT;
+
+ The argument is the table name (optionally it may be qualified)
+ or the OID of the table. Note that pgstattuple only returns
one row.
4. Notes
/*
- * $Header: /cvsroot/pgsql/contrib/pgstattuple/pgstattuple.c,v 1.9 2002/09/04 20:31:08 momjian Exp $
+ * $Header: /cvsroot/pgsql/contrib/pgstattuple/pgstattuple.c,v 1.10 2003/06/12 08:02:53 momjian Exp $
*
* Copyright (c) 2001,2002 Tatsuo Ishii
*
PG_FUNCTION_INFO_V1(pgstattuple);
+PG_FUNCTION_INFO_V1(pgstattuplebyid);
extern Datum pgstattuple(PG_FUNCTION_ARGS);
+extern Datum pgstattuplebyid(PG_FUNCTION_ARGS);
+
+static Datum pgstattuple_real(Relation rel);
/* ----------
* pgstattuple:
* ----------
*/
-#define DUMMY_TUPLE "pgstattuple_type"
+#define DUMMY_TUPLE "public.pgstattuple_type"
#define NCOLUMNS 9
#define NCHARS 32
text *relname = PG_GETARG_TEXT_P(0);
RangeVar *relrv;
Relation rel;
+ Datum result;
+
+ /* open relation */
+ relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname,
+ "pgstattuple"));
+ rel = heap_openrv(relrv, AccessShareLock);
+
+ result = pgstattuple_real(rel);
+
+ PG_RETURN_DATUM(result);
+}
+
+Datum
+pgstattuplebyid(PG_FUNCTION_ARGS)
+{
+ Oid relid = PG_GETARG_OID(0);
+ Relation rel;
+ Datum result;
+
+ /* open relation */
+ rel = heap_open(relid, AccessShareLock);
+
+ result = pgstattuple_real(rel);
+
+ PG_RETURN_DATUM(result);
+}
+
+/*
+ * pgstattuple_real
+ *
+ * The real work occurs here
+ */
+static Datum
+pgstattuple_real(Relation rel)
+{
HeapScanDesc scan;
HeapTuple tuple;
BlockNumber nblocks;
*/
attinmeta = TupleDescGetAttInMetadata(tupdesc);
- /* open relation */
- relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname,
- "pgstattuple"));
- rel = heap_openrv(relrv, AccessShareLock);
-
nblocks = RelationGetNumberOfBlocks(rel);
scan = heap_beginscan(rel, SnapshotAny, 0, NULL);
pfree(values[i]);
pfree(values);
- PG_RETURN_DATUM(result);
+ return(result);
}
CREATE OR REPLACE FUNCTION pgstattuple(text)
RETURNS pgstattuple_type
AS 'MODULE_PATHNAME', 'pgstattuple'
-LANGUAGE 'C' WITH (isstrict);
+LANGUAGE 'C' STRICT;
+
+CREATE OR REPLACE FUNCTION pgstattuple(oid)
+RETURNS pgstattuple_type
+AS 'MODULE_PATHNAME', 'pgstattuplebyid'
+LANGUAGE 'C' STRICT;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/ip.c,v 1.12 2003/06/12 07:36:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/ip.c,v 1.13 2003/06/12 08:02:53 momjian Exp $
*
* This file and the IPV6 implementation were initially provided by
* Nigel Kukard <nkukard@lbsd.net>, Linux Based Systems Design
/* This is intended to be used in both frontend and backend, so use c.h */
#include "c.h"
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
+
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/file.h>
+#endif
+
#include "libpq/ip.h"
* Encoding names and routines for work with it. All
* in this file is shared bedween FE and BE.
*
- * $Id: encnames.c,v 1.13 2003/05/15 16:35:29 momjian Exp $
+ * $Id: encnames.c,v 1.14 2003/06/12 08:02:53 momjian Exp $
*/
#ifdef FRONTEND
#include "postgres_fe.h"
#include "utils/builtins.h"
#endif
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <unistd.h>
+#endif
#include "mb/pg_wchar.h"
#include <ctype.h>
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: c.h,v 1.147 2003/05/16 01:57:51 momjian Exp $
+ * $Id: c.h,v 1.148 2003/06/12 08:02:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <SupportDefs.h>
#endif
-#ifdef WIN32
+#if defined(WIN32) && !defined(_MSC_VER) && !defined(__BORLANDC__)
/* We have to redefine some system functions after they are included above */
#include "pg_config_os.h"
#endif
*
* Copyright (c) 2003, PostgreSQL Global Development Group
*
- * $Id: getaddrinfo.h,v 1.3 2003/06/12 07:36:51 momjian Exp $
+ * $Id: getaddrinfo.h,v 1.4 2003/06/12 08:02:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef GETADDRINFO_H
#define GETADDRINFO_H
+#if !defined(WIN32) || (!defined(_MSC_VER) && !defined(__BORLANDC__))
#include <sys/socket.h>
#include <netdb.h>
+#endif
#ifndef HAVE_STRUCT_ADDRINFO
#define HAVE_ATEXIT
#define HAVE_MEMMOVE
+#ifdef __BORLANDC__
+#define HAVE_RANDOM
+#endif
+
/* use _snprintf instead of snprintf */
#define HAVE_DECL_SNPRINTF 1
#define snprintf _snprintf
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: port.h,v 1.3 2003/05/16 04:59:22 momjian Exp $
+ * $Id: port.h,v 1.4 2003/06/12 08:02:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#endif
#ifndef HAVE_INET_ATON
+#if !defined(WIN32) || (!defined(_MSC_VER) && !defined(__BORLANDC__))
# include <netinet/in.h>
# include <arpa/inet.h>
+#endif
extern int inet_aton(const char *cp, struct in_addr * addr);
#endif
# and a Win32 dynamic library libpq.dll with import library libpqdll.lib
# Borland C++ base install directory goes here
-BCB=d:\Borland\Bcc55
+# BCB=d:\Borland\Bcc55
!MESSAGE Building the Win32 DLL and Static Library...
!MESSAGE
LIB32_FLAGS=
LIB32_OBJS= \
"$(OUTDIR)\win32.obj" \
+ "$(INTDIR)\getaddrinfo.obj" \
+ "$(INTDIR)\inet_aton.obj" \
+ "$(INTDIR)\crypt.obj" \
+ "$(INTDIR)\path.obj" \
"$(INTDIR)\dllist.obj" \
"$(INTDIR)\md5.obj" \
+ "$(INTDIR)\ip.obj" \
"$(INTDIR)\fe-auth.obj" \
"$(INTDIR)\fe-connect.obj" \
"$(INTDIR)\fe-exec.obj" \
"$(INTDIR)\encnames.obj"
RSC=brcc32.exe
-RSC_PROJ=/l 0x409 /fo"$(INTDIR)\libpq.res"
+RSC_PROJ=-l 0x409 -i$(BCB)\include -fo"$(INTDIR)\libpq.res"
LINK32=ilink32.exe
LINK32_FLAGS = -Gn -L$(BCB)\lib;$(INTDIR); -x -Tpd -v
# ---------------------------------------------------------------------------
.path.obj = $(INTDIR)
-.path.c = .;..\..\backend\libpq;..\..\backend\lib;..\..\backend\utils\mb
+.path.c = .;..\..\port;..\..\backend\libpq;..\..\backend\lib;..\..\backend\utils\mb
# ---------------------------------------------------------------------------
ALL: "$(OUTDIR)" "$(OUTDIR)\blibpq.dll" "$(OUTDIR)\blibpq.lib"
CLEAN :
+ -@erase "$(INTDIR)\getaddrinfo.obj"
+ -@erase "$(INTDIR)\inet_aton.obj"
+ -@erase "$(INTDIR)\crypt.obj"
+ -@erase "$(INTDIR)\path.obj"
-@erase "$(INTDIR)\dllist.obj"
-@erase "$(INTDIR)\md5.obj"
+ -@erase "$(INTDIR)\ip.obj"
-@erase "$(INTDIR)\fe-auth.obj"
-@erase "$(INTDIR)\fe-connect.obj"
-@erase "$(INTDIR)\fe-exec.obj"
"$(OUTDIR)\blibpq.lib" import32.lib cw32mti.lib, +
blibpqdll.def,"$(INTDIR)\libpq.res"
!
- implib -a "$(OUTDIR)\blibpqdll.lib" blibpqdll.def $@
+ implib -w "$(OUTDIR)\blibpqdll.lib" blibpqdll.def $@
"$(INTDIR)\libpq.res" : "$(INTDIR)" libpq.rc
$(RSC) $(RSC_PROJ) libpq.rc
_pg_encoding_to_char @ 92
_pg_utf_mblen @ 93
_PQunescapeBytea @ 94
- _PQfreeMem @ 95
+ _PQfreemem @ 95
; Aliases for MS compatible names
PQconnectdb = _PQconnectdb
pg_encoding_to_char = _pg_encoding_to_char
pg_utf_mblen = _pg_utf_mblen
PQunescapeBytea = _PQunescapeBytea
- PQfreeMem = _PQfreeMem
+ PQfreemem = _PQfreemem
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.244 2003/06/12 07:36:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.245 2003/06/12 08:02:57 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include "libpq/ip.h"
#include "mb/pg_wchar.h"
+/* For FNCTL_NONBLOCK */
+#if defined(WIN32) || defined(__BEOS__)
+long ioctlsocket_ret;
+#endif
#define PGPASSFILE ".pgpass"
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.92 2003/06/08 17:43:00 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.93 2003/06/12 08:02:57 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <errno.h>
#include <signal.h>
#include <time.h>
+
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <netinet/in.h>
#include <arpa/inet.h>
+#endif
#ifdef WIN32
#include "win32.h"
pg_encoding_to_char @ 92
pg_utf_mblen @ 93
PQunescapeBytea @ 94
- PQfreeMem @ 95
+ PQfreemem @ 95
ALL : "$(OUTDIR)\libpq.lib" "$(OUTDIR)\libpq.dll"
CLEAN :
+ -@erase "$(INTDIR)\getaddrinfo.obj"
+ -@erase "$(INTDIR)\inet_aton.obj"
+ -@erase "$(INTDIR)\crypt.obj"
+ -@erase "$(INTDIR)\path.obj"
-@erase "$(INTDIR)\dllist.obj"
-@erase "$(INTDIR)\md5.obj"
+ -@erase "$(INTDIR)\ip.obj"
-@erase "$(INTDIR)\fe-auth.obj"
-@erase "$(INTDIR)\fe-connect.obj"
-@erase "$(INTDIR)\fe-exec.obj"
LIB32_FLAGS=$(LOPT) /nologo /out:"$(OUTDIR)\libpq.lib"
LIB32_OBJS= \
"$(OUTDIR)\win32.obj" \
+ "$(INTDIR)\getaddrinfo.obj" \
+ "$(INTDIR)\inet_aton.obj" \
+ "$(INTDIR)\crypt.obj" \
+ "$(INTDIR)\path.obj" \
"$(INTDIR)\dllist.obj" \
"$(INTDIR)\md5.obj" \
+ "$(INTDIR)\ip.obj" \
"$(INTDIR)\fe-auth.obj" \
"$(INTDIR)\fe-connect.obj" \
"$(INTDIR)\fe-exec.obj" \
$(LINK32_FLAGS) $(LINK32_OBJS)
<<
+"$(OUTDIR)\getaddrinfo.obj" : ..\..\port\getaddrinfo.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\port\getaddrinfo.c
+<<
+
+"$(OUTDIR)\inet_aton.obj" : ..\..\port\inet_aton.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\port\inet_aton.c
+<<
+
+"$(OUTDIR)\crypt.obj" : ..\..\port\crypt.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\port\crypt.c
+<<
+
+"$(OUTDIR)\path.obj" : ..\..\port\path.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\port\path.c
+<<
"$(OUTDIR)\dllist.obj" : ..\..\backend\lib\dllist.c
$(CPP) @<<
$(CPP_PROJ) ..\..\backend\libpq\md5.c
<<
+"$(OUTDIR)\ip.obj" : ..\..\backend\libpq\ip.c
+ $(CPP) @<<
+ $(CPP_PROJ) ..\..\backend\libpq\ip.c
+<<
"$(INTDIR)\wchar.obj" : ..\..\backend\utils\mb\wchar.c
$(CPP) @<<
#include <sys/types.h>
#include <limits.h>
#include <stdlib.h>
-#include <unistd.h>
+
+#ifdef WIN32
#include <windows.h>
+#else
+#include <unistd.h>
+#endif
static int des_setkey(const char *key);
static int des_cipher(const char *in, char *out, long salt, int num_iter);
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/port/getaddrinfo.c,v 1.4 2003/06/12 07:36:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/port/getaddrinfo.c,v 1.5 2003/06/12 08:02:57 momjian Exp $
*
*-------------------------------------------------------------------------
*/
/* This is intended to be used in both frontend and backend, so use c.h */
#include "c.h"
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#ifdef HAVE_UNIX_SOCKETS
#include <sys/un.h>
#endif
+#endif
#include "getaddrinfo.h"
-/* $Id: inet_aton.c,v 1.2 2002/09/02 02:47:07 momjian Exp $
+/* $Id: inet_aton.c,v 1.3 2003/06/12 08:02:57 momjian Exp $
*
* This inet_aton() function was taken from the GNU C library and
* incorporated into Postgres for those systems which do not have this
#include "c.h"
+#if !defined(WIN32) || (!defined(_MSC_VER) && !defined(__BORLANDC__))
#include <netinet/in.h>
#include <ctype.h>
+#endif
/*
* Check whether "cp" is a valid ascii representation