aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/Contrib.index82
-rw-r--r--contrib/Makefile20
-rw-r--r--contrib/README144
-rw-r--r--contrib/mac/README.mac8
-rw-r--r--contrib/odbc/Makefile48
-rw-r--r--contrib/odbc/README.odbc38
-rw-r--r--contrib/odbc/odbc-pre7.source162
-rw-r--r--contrib/odbc/odbc.c403
-rw-r--r--doc/src/sgml/ecpg.sgml15
-rw-r--r--doc/src/sgml/geqo.sgml4
-rw-r--r--doc/src/sgml/odbc.sgml629
-rw-r--r--doc/src/sgml/page.sgml48
-rw-r--r--src/interfaces/odbc/GNUmakefile16
-rw-r--r--src/interfaces/odbc/odbc.sql (renamed from contrib/odbc/odbc.sql)12
14 files changed, 258 insertions, 1371 deletions
diff --git a/contrib/Contrib.index b/contrib/Contrib.index
deleted file mode 100644
index fe183127ea3..00000000000
--- a/contrib/Contrib.index
+++ /dev/null
@@ -1,82 +0,0 @@
-
-The PostgreSQL contrib:
-~~~~~~~~~~~~~~~~~~~~~~
-
-tips/apache_logging -
- Getting Apache to log to PostgreSQL
- by Terry Mackintosh <terry@terrym.com>
-
-array -
- Array iterator functions
- by Massimo Dal Zotto <dz@cs.unitn.it>
-
-earthdistance -
- Operator for computing earth distance for two points
- by Hal Snyder <hal@vailsys.com>
-
-findoidjoins -
- Finds the joins used by oid columns by examining the actual
- values in the oid columns and row oids.
- by Bruce Momjian <root@candle.pha.pa.us>
-
-fulltextindex -
- Full text indexing using triggers
- by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
-
-isbn_issn -
- PostgreSQL type extensions for ISBN (books) and ISSN (serials)
- by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
-
-linux -
- Start postgres back end system
- by Thomas Lockhart <lockhart@alumni.caltech.edu>
-
-lo -
- Large Object maintenance
- by Peter Mount <peter@retep.org.uk>
-
-miscutil -
- Postgres assert checking and various utility functions
- by Dal Zotto <dz@cs.unitn.it>
-
-mSQL-interface -
- mSQL API translation library
- by Aldrin Leal <aldrin@americasnet.com>
-
-noupdate -
- trigger to prevent updates on single columns
-
-
-pg_dumplo -
- Dump large objects
- by Karel Zak <zakkr@zf.jcu.cz>
-
-soundex -
- Prototype for soundex function
-
-spi -
- A general trigger function autoinc() and so on.
-
-string -
- C-like input/output conversion routines for strings
- by Massimo Dal Zotto <dz@cs.unitn.it>
-
-tools -
- Assorted developer tools
- by Massimo Dal Zotto <dz@cs.unitn.it>
-
-unixdate -
- Conversions from integer to datetime
- by Thomas Lockhart <lockhart@alumni.caltech.edu>
-
-userlock -
- User locks
- by Massimo Dal Zotto <dz@cs.unitn.it>
-
-vacuumlo -
- Remove orphaned large objects
- by Peter T Mount <peter@retep.org.uk>
-
-pgbench -
- TPC-B like benchmarking tool
- by Tatsuo Ishii <t-ishii@sra.co.jp>
diff --git a/contrib/Makefile b/contrib/Makefile
index 411979e9eb8..a1adaa048cf 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -1,12 +1,8 @@
-#
-# The PostgreSQL contrib tree Makefile
-#
-# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.7 2000/07/16 14:50:29 petere Exp $
-#
+# $Header: /cvsroot/pgsql/contrib/Makefile,v 1.8 2000/09/18 20:11:34 petere Exp $
subdir = contrib
top_builddir = ..
-include ../src/Makefile.global
+include $(top_builddir)/src/Makefile.global
WANTED_DIRS = array \
earthdistance \
@@ -16,6 +12,7 @@ WANTED_DIRS = array \
linux \
lo \
mSQL-interface \
+ mac \
miscutil \
noupdate \
pg_dumplo \
@@ -27,19 +24,10 @@ WANTED_DIRS = array \
unixdate \
userlock \
vacuumlo
- # odbc
all install installdirs uninstall clean distclean maintainer-clean:
for dir in $(WANTED_DIRS); do \
if [ -e $$dir/Makefile ]; then \
- $(MAKE) -C $$dir $@ ; \
+ $(MAKE) -C $$dir $@; \
fi; \
done
-
-install:
- for dir in $(WANTED_DIRS); do \
- if [ -e $$dir/Makefile ]; then \
- $(MAKE) -C $$dir $@ ; \
- fi; \
- done
- $(INSTALL_DATA) Contrib.index $(docdir)/contrib
diff --git a/contrib/README b/contrib/README
index 23cfe8c4d29..0187c2ae5b6 100644
--- a/contrib/README
+++ b/contrib/README
@@ -1,81 +1,109 @@
+The PostgreSQL contrib tree
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The PostgreSQL contrib tree
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+This subtree contains tools, modules, and examples that are not
+maintained as part of the core PostgreSQL system, mainly because
+they only address a limited audience or are too inelegant to be
+sold as an official feature. That, however, does not preclude
+their usefulness.
- FIXME:
- odbc
- spi/preprocessor
- tools
+Each subdirectory contains a README file with information about the
+module. Most items can be built with `gmake all' and installed
+with `gmake install' in the usual fashion, after you have run the
+`configure' script in the top-level directory. Some directories
+supply new user-defined functions, operators, or types. After you
+have installed the files you need to register the new entities in
+the database system by running the commands in the supplied .sql
+file. For example,
- - the contrib contain is in the "Contrib.index"
+ $ psql -d dbname -f module.sql
- - in each directory must be Makefile, possible Makefile template
- is below this text,
+See the PostgreSQL documentation for more information about this
+procedure.
---------
-#
-# $Header: /cvsroot/pgsql/contrib/README,v 1.19 2000/06/19 13:52:59 momjian Exp $
-#
-TOPDIR=../..
+Index:
+------
-include ../Makefile.global
+array -
+ Array iterator functions
+ by Massimo Dal Zotto <dz@cs.unitn.it>
-NAME = some_name
+earthdistance -
+ Operator for computing earth distance for two points
+ by Hal Snyder <hal@vailsys.com>
-PROGRAM =
-OBJS = $(NAME).o
-DOCS = $(NAME).doc
-SQLS = $(NAME).sql
-BINS =
-EXAMPLES=
-MODS = $(NAME)$(DLSUFFIX)
+findoidjoins -
+ Finds the joins used by oid columns by examining the actual
+ values in the oid columns and row oids.
+ by Bruce Momjian <pgman@candle.pha.pa.us>
-CFLAGS += -I. $(CFLAGS_SL)
+fulltextindex -
+ Full text indexing using triggers
+ by Maarten Boekhold <maartenb@dutepp0.et.tudelft.nl>
-OTHER_CLEAN = $(SQLS)
+isbn_issn -
+ PostgreSQL type extensions for ISBN (books) and ISSN (serials)
+ by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
-all: $(MODS) $(SQLS)
+linux -
+ Scripts for starting and stopping the PostgreSQL server on
+ a Linux system
+ by Thomas Lockhart <lockhart@alumni.caltech.edu>
-%.sql: %.sql.in
- $(SED) "s|MODULE_PATHNAME|$(CONTRIB_MODDIR)/$@|" < $< > $@
+lo -
+ Large Object maintenance
+ by Peter Mount <peter@retep.org.uk>
+mSQL-interface -
+ mSQL API translation library
+ by Aldrin Leal <aldrin@americasnet.com>
-install: install_doc install_sql install_mod install_bin install_example
+mac -
+ Support functions for MAC address types
+ by Lawrence E. Rosenman <ler@lerctr.org>
-install_doc:
- for inst_file in $(DOCS); do \
- $(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_DOCDIR); \
- done
+miscutil -
+ PostgreSQL assert checking and various utility functions
+ by Massimo Dal Zotto <dz@cs.unitn.it>
-install_sql:
- for inst_file in $(SQLS); do \
- $(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_SQLDIR); \
- done
+noupdate -
+ trigger to prevent updates on single columns
-install_mod:
- for inst_file in $(MODS); do \
- $(INSTALL) $(INSTL_SHLIB_OPTS) $$inst_file $(CONTRIB_MODDIR); \
- done
+pgbench -
+ TPC-B like benchmarking tool
+ by Tatsuo Ishii <t-ishii@sra.co.jp>
-install_bin:
- for inst_file in $(BINS); do \
- $(INSTALL) $(INSTL_EXE_OPTS) $$inst_file $(CONTRIB_BINDIR); \
- done
+pg_dumplo -
+ Dump large objects
+ by Karel Zak <zakkr@zf.jcu.cz>
-install_example:
- for inst_file in $(EXAMPLES); do \
- $(INSTALL) $(INSTL_LIB_OPTS) $$inst_file $(CONTRIB_EXAMPLESDIR); \
- done
+soundex -
+ Soundex function
-depend dep:
- $(CC) -MM -MG $(CFLAGS) *.c > depend
+spi -
+ Various trigger functions, examples for using SPI.
-clean:
- $(RM) *~ $(OBJS) $(MODS) $(PROGRAM) depend $(OTHER_CLEAN) core log
+string -
+ C-like input/output conversion routines for strings
+ by Massimo Dal Zotto <dz@cs.unitn.it>
-ifeq (depend,$(wildcard depend))
-include depend
-endif
------------
- \ No newline at end of file
+tips/apache_logging -
+ Getting Apache to log to PostgreSQL
+ by Terry Mackintosh <terry@terrym.com>
+
+tools -
+ Assorted developer tools
+ by Massimo Dal Zotto <dz@cs.unitn.it>
+
+unixdate -
+ Conversions from integer to datetime
+ by Thomas Lockhart <lockhart@alumni.caltech.edu>
+
+userlock -
+ User locks
+ by Massimo Dal Zotto <dz@cs.unitn.it>
+
+vacuumlo -
+ Remove orphaned large objects
+ by Peter T Mount <peter@retep.org.uk>
diff --git a/contrib/mac/README.mac b/contrib/mac/README.mac
new file mode 100644
index 00000000000..f68a5fafa48
--- /dev/null
+++ b/contrib/mac/README.mac
@@ -0,0 +1,8 @@
+This directory contains tools to create a mapping table from MAC
+addresses (e.g., Ethernet hardware addresses) to human-readable
+manufacturer strings. The `createoui' script builds the table
+structure, `updateoui' obtains the current official mapping table
+from the web site of the IEEE, converts it, and stores it in the
+database, `dropoui' removes everything. Use the --help option to
+get more usage information from the respective script. All three
+use the psql program; any extra arguments will be passed to psql.
diff --git a/contrib/odbc/Makefile b/contrib/odbc/Makefile
deleted file mode 100644
index e81f51f215b..00000000000
--- a/contrib/odbc/Makefile
+++ /dev/null
@@ -1,48 +0,0 @@
-# ODBC extensions
-# Thomas Lockhart 2000-04-03
-
-subdir = contrib/odbc
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-
-ifndef PGLIB
- PGLIB= .
-endif
-
-CFLAGS+= $(CFLAGS_SL)
-
-TARGETS_7= odbc.sql
-TARGETS_PRE7= odbc$(DLSUFFIX) odbc-pre7.sql
-
-TARGETS= $(TARGETS_7)
-
-CLEANFILES+= $(TARGETS) $(TARGETS_PRE7)
-
-all: $(TARGETS)
-
-install: all
-ifneq ($(filter odbc$(DLSUFFIX), $(TARGETS)),)
- -test -d $(PGLIB) || $(INSTALL) -d $(PGLIB)
- $(INSTALL) odbc$(DLSUFFIX) $(PGLIB)
-endif
-
-pre7:
- $(MAKE) TARGETS="$(TARGETS) $(TARGETS_PRE7)"
-
-install-pre7:
- $(MAKE) TARGETS="$(TARGETS) $(TARGETS_PRE7)" install
-
-odbc-pre7.sql: odbc-pre7.source odbc.sql
- rm -f $@; \
- cat $^ \
- | sed -e "s:_OBJWD_:$(PGLIB):g" \
- -e "s:_DLSUFFIX_:$(DLSUFFIX):g" \
- -e "s:float(15):float8:g" > $@
-
-%.sql: %.source
- rm -f $@; \
- sed -e "s:_OBJWD_:$(PGLIB):g" \
- -e "s:_DLSUFFIX_:$(DLSUFFIX):g" < $< > $@
-
-clean:
- rm -f $(TARGETS) *.o
diff --git a/contrib/odbc/README.odbc b/contrib/odbc/README.odbc
deleted file mode 100644
index c36f183c054..00000000000
--- a/contrib/odbc/README.odbc
+++ /dev/null
@@ -1,38 +0,0 @@
-This directory contains support functions for the ODBC driver
-supplied with PostgreSQL-7.0.
-
-To enable additional ODBC functions with PostgreSQL-7.0, simply
-execute the commands in odbc.sql:
-
-psql
-Welcome to psql, the PostgreSQL interactive terminal.
-
-Type: \copyright for distribution terms
- \h for help with SQL commands
- \? for help on internal slash commands
- \g or terminate with semicolon to execute query
- \q to quit
-
-postgres=# \i odbc.sql
-CREATE
-...
-
-
-To enable additional ODBC functions with versions of PostgreSQL
-prior to PostgreSQL-7.0 (e.g. PostgreSQL-6.5.3), build the shared
-library and SQL commands as follows:
-
-make pre7
-psql
-Welcome to psql, the PostgreSQL interactive terminal.
-
-Type: \copyright for distribution terms
- \h for help with SQL commands
- \? for help on internal slash commands
- \g or terminate with semicolon to execute query
- \q to quit
-
-postgres=# \i odbc-pre7.sql
-CREATE
-...
-
diff --git a/contrib/odbc/odbc-pre7.source b/contrib/odbc/odbc-pre7.source
deleted file mode 100644
index 4fa06c4264d..00000000000
--- a/contrib/odbc/odbc-pre7.source
+++ /dev/null
@@ -1,162 +0,0 @@
--- ODBC-pre7.sql
---
--- Use float8 rather than float(15) since pre-7.0 does not accept
--- SQL92 type names of this form in the CREATE FUNCTION command.
---
-
---
--- Character string manipulation
---
-
---
--- Compatibility functions for pre-v7.0.
--- These should be applied to pre-v7.0 databases
--- when using the v7.0 ODBC driver.
---
-
-CREATE FUNCTION char_length(text)
- RETURNS integer
- AS 'SELECT length(CAST($1 AS text))'
- LANGUAGE 'SQL';
-
-CREATE FUNCTION pow(float8)
- RETURNS float8
- AS 'SELECT dpow($1)'
- LANGUAGE 'SQL';
-
---
--- Extensions for ODBC compliance in v7.0.
--- In the current driver, ODBC functions must map directly into a
--- Postgres function. So in some cases we must create a compatible
--- function.
---
-
-CREATE FUNCTION ascii(text)
- RETURNS integer
- AS '_OBJWD_/odbc_DLSUFFIX_', 'ascii'
- LANGUAGE 'C';
-
-CREATE FUNCTION ichar(integer)
- RETURNS char(1)
- AS '_OBJWD_/odbc_DLSUFFIX_', 'ichar'
- LANGUAGE 'C';
-
-CREATE FUNCTION insert(text, integer, integer, text)
- RETURNS text
- AS '_OBJWD_/odbc_DLSUFFIX_', 'insert'
- LANGUAGE 'C';
-
--- replace all occurences of $2 with $3
-CREATE FUNCTION replace(text, text, text)
- RETURNS text
- AS '_OBJWD_/odbc_DLSUFFIX_', 'replace'
- LANGUAGE 'C';
-
--- return the string repeated n times
-CREATE FUNCTION repeat(text, integer)
- RETURNS text
- AS '_OBJWD_/odbc_DLSUFFIX_', 'repeat'
- LANGUAGE 'C';
-
---
--- Mathematical functions for pre-v7.0
---
-
-CREATE FUNCTION dround(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dround'
- LANGUAGE 'C';
-
-CREATE FUNCTION round(float8)
- RETURNS float8
- AS 'SELECT dround($1)'
- LANGUAGE 'SQL';
-
---
--- Math functions present in backend, but not in catalog for v7.0
---
-
-CREATE FUNCTION acos(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dacos'
- LANGUAGE 'C';
-
-CREATE FUNCTION asin(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dasin'
- LANGUAGE 'C';
-
-CREATE FUNCTION atan(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'datan'
- LANGUAGE 'C';
-
-CREATE FUNCTION atan2(float8,float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'datan2'
- LANGUAGE 'C';
-
-CREATE FUNCTION cos(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dcos'
- LANGUAGE 'C';
-
-CREATE FUNCTION cot(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dcot'
- LANGUAGE 'C';
-
-CREATE FUNCTION sin(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dsin'
- LANGUAGE 'C';
-
-CREATE FUNCTION dtan(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dtan'
- LANGUAGE 'C';
-
-CREATE FUNCTION degrees(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'degrees'
- LANGUAGE 'C';
-
-CREATE FUNCTION pi()
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'dpi'
- LANGUAGE 'C';
-
-CREATE FUNCTION radians(float8)
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'radians'
- LANGUAGE 'C';
-
--- random number generator currently requires RAND_MAX be available
-CREATE FUNCTION random()
- RETURNS float8
- AS '_OBJWD_/odbc_DLSUFFIX_', 'drandom'
- LANGUAGE 'C';
-
-CREATE FUNCTION truncate(numeric,integer)
- RETURNS numeric
- AS 'SELECT trunc($1, $2)'
- LANGUAGE 'SQL';
-
---
--- Date/time functions for v7.0
---
-
-CREATE FUNCTION interval_mul(interval,float8)
- RETURNS interval
- AS '_OBJWD_/odbc_DLSUFFIX_'
- LANGUAGE 'C';
-
-CREATE OPERATOR * (
- LEFTARG = interval,
- RIGHTARG = float8,
- PROCEDURE = interval_mul
-);
-
-
-
-
diff --git a/contrib/odbc/odbc.c b/contrib/odbc/odbc.c
deleted file mode 100644
index 2a134ee488b..00000000000
--- a/contrib/odbc/odbc.c
+++ /dev/null
@@ -1,403 +0,0 @@
-#include "postgres.h"
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <float.h> /* faked on sunos4 */
-#include <math.h>
-#include <limits.h>
-
-#include "fmgr.h"
-#include "utils/timestamp.h"
-#include "utils/builtins.h"
-
-
-int4 ascii(text *string);
-text *ichar(int4 cvalue);
-text *repeat(text *string, int4 count);
-Interval *interval_mul(Interval *span1, float8 *arg2);
-float64 dasin(float64 arg1);
-float64 datan(float64 arg1);
-float64 datan2(float64 arg1, float64 arg2);
-float64 dcos(float64 arg1);
-float64 dcot(float64 arg1);
-float64 dsin(float64 arg1);
-float64 dtan(float64 arg1);
-float64 degrees(float64 arg1);
-float64 dpi(void);
-float64 radians(float64 arg1);
-float64 drandom(void);
-void setseed(int32 seed);
-
-
-int4
-ascii(text *string)
-{
- if (!PointerIsValid(string))
- return 0;
-
- if (VARSIZE(string) <= VARHDRSZ)
- return 0;
-
- return ((int) *(VARDATA(string)));
-} /* ascii() */
-
-
-text *
-ichar(int4 cvalue)
-{
- text *result;
-
- result = (text *) palloc(VARHDRSZ + 1);
- VARSIZE(result) = VARHDRSZ + 1;
- *VARDATA(result) = (char) cvalue;
-
- return result;
-} /* ichar() */
-
-
-text *
-repeat(text *string, int4 count)
-{
- text *result;
- int slen, tlen;
- int i;
- char *cp;
-
- if (count < 0)
- count = 0;
-
- slen = (VARSIZE(string)-VARHDRSZ);
- tlen = (VARHDRSZ + (count * slen));
-
- result = (text *) palloc(tlen);
-
- VARSIZE(result) = tlen;
- cp = VARDATA(result);
- for (i = 0; i < count; i++)
- {
- memcpy(cp, VARDATA(string), slen);
- cp += slen;
- }
-
- return result;
-} /* ichar() */
-
-Interval *
-interval_mul(Interval *span1, float8 *arg2)
-{
- Interval *result;
- double months;
-
- if ((!PointerIsValid(span1)) || (!PointerIsValid(arg2)))
- return NULL;
-
- if (!PointerIsValid(result = palloc(sizeof(Interval))))
- elog(ERROR, "Memory allocation failed, can't divide intervals");
-
- months = (span1->month * *arg2);
- result->month = rint(months);
- result->time = JROUND(span1->time * *arg2);
- result->time += JROUND((months - result->month) * 30);
-
- return result;
-} /* interval_mul() */
-
-/*
- * dasin - returns a pointer to the arcsin of arg1 (radians)
- */
-float64
-dasin(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) asin(tmp);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "dasin(%f) input is out of range", *arg1);
-
- CheckFloat8Val(*result);
- return result;
-} /* dasin() */
-
-
-/*
- * datan - returns a pointer to the arctan of arg1 (radians)
- */
-float64
-datan(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) atan(tmp);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "atan(%f) input is out of range", *arg1);
-
- CheckFloat8Val(*result);
- return result;
-} /* datan() */
-
-
-/*
- * atan2 - returns a pointer to the arctan2 of arg1 (radians)
- */
-float64
-datan2(float64 arg1, float64 arg2)
-{
- float64 result;
-
- if (!PointerIsValid(arg1) || !PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- errno = 0;
- *result = (float64data) atan2(*arg1, *arg2);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "atan2(%f,%f) input is out of range", *arg1, *arg2);
-
- CheckFloat8Val(*result);
- return result;
-} /* datan2() */
-
-
-/*
- * dcos - returns a pointer to the cosine of arg1 (radians)
- */
-float64
-dcos(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) cos(tmp);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "dcos(%f) input is out of range", *arg1);
-
- CheckFloat8Val(*result);
- return result;
-} /* dcos() */
-
-
-/*
- * dcot - returns a pointer to the cotangent of arg1 (radians)
- */
-float64
-dcot(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) tan(tmp);
- if ((errno != 0) || (*result == 0.0)
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "dcot(%f) input is out of range", *arg1);
-
- *result = 1.0/(*result);
- CheckFloat8Val(*result);
- return result;
-} /* dcot() */
-
-
-/*
- * dsin - returns a pointer to the sine of arg1 (radians)
- */
-float64
-dsin(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) sin(tmp);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "dsin(%f) input is out of range", *arg1);
-
- CheckFloat8Val(*result);
- return result;
-} /* dsin() */
-
-
-/*
- * dtan - returns a pointer to the tangent of arg1 (radians)
- */
-float64
-dtan(float64 arg1)
-{
- float64 result;
- double tmp;
-
- if (!PointerIsValid(arg1))
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- tmp = *arg1;
- errno = 0;
- *result = (float64data) tan(tmp);
- if (errno != 0
-#ifdef HAVE_FINITE
- || !finite(*result)
-#endif
- )
- elog(ERROR, "dtan(%f) input is out of range", *arg1);
-
- CheckFloat8Val(*result);
- return result;
-} /* dtan() */
-
-
-#ifndef M_PI
-/* from my RH5.2 gcc math.h file - thomas 2000-04-03 */
-#define M_PI 3.14159265358979323846
-#endif
-
-
-/*
- * degrees - returns a pointer to degrees converted from radians
- */
-float64
-degrees(float64 arg1)
-{
- float64 result;
-
- if (!arg1)
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- *result = ((*arg1) * (180.0 / M_PI));
-
- CheckFloat8Val(*result);
- return result;
-} /* degrees() */
-
-
-/*
- * dpi - returns a pointer to degrees converted to radians
- */
-float64
-dpi(void)
-{
- float64 result;
-
- result = (float64) palloc(sizeof(float64data));
-
- *result = (M_PI);
-
- return result;
-} /* dpi() */
-
-
-/*
- * radians - returns a pointer to radians converted from degrees
- */
-float64
-radians(float64 arg1)
-{
- float64 result;
-
- if (!arg1)
- return (float64) NULL;
-
- result = (float64) palloc(sizeof(float64data));
-
- *result = ((*arg1) * (M_PI / 180.0));
-
- CheckFloat8Val(*result);
- return result;
-} /* radians() */
-
-
-#ifdef RAND_MAX
-
-/*
- * drandom - returns a random number
- */
-float64
-drandom(void)
-{
- float64 result;
-
- result = (float64) palloc(sizeof(float64data));
-
- /* result 0.0-1.0 */
- *result = (((double)rand()) / RAND_MAX);
-
- CheckFloat8Val(*result);
- return result;
-} /* drandom() */
-
-
-/*
- * setseed - set seed for the random number generator
- */
-void
-setseed(int32 seed)
-{
- srand(seed);
-
- return;
-} /* setseed() */
-
-#endif
-
-
diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml
index fabf9bee397..8b3049c6ee7 100644
--- a/doc/src/sgml/ecpg.sgml
+++ b/doc/src/sgml/ecpg.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.15 2000/08/23 05:59:01 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.16 2000/09/18 20:11:36 petere Exp $
-->
<chapter>
@@ -31,9 +31,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/ecpg.sgml,v 1.15 2000/08/23 05:59:01 thomas
<para>
This describes an embedded <acronym>SQL</acronym> in <acronym>C</acronym>
package for <productname>Postgres</productname>.
-
It is written by <ulink url="mailto:linus@epact.se">Linus Tolke</ulink>
and <ulink url="mailto:meskes@debian.org">Michael Meskes</ulink>.
+ The package is installed with the <productname>Postgres</> distribution.
<note>
<para>
@@ -504,17 +504,6 @@ struct sqlca
</sect1>
<sect1>
- <title>Installation</title>
-
- <para>
- Since version 0.5 <application>ecpg</application> is distributed
- together with <productname>Postgres</productname>. So you
- should get your precompiler, libraries and header files compiled and
- installed by default as a part of your installation.
- </para>
- </sect1>
-
- <sect1>
<title>For the Developer</title>
<para>
diff --git a/doc/src/sgml/geqo.sgml b/doc/src/sgml/geqo.sgml
index 04b8def4ed1..10fc2d90e8f 100644
--- a/doc/src/sgml/geqo.sgml
+++ b/doc/src/sgml/geqo.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/geqo.sgml,v 1.11 2000/08/23 05:59:02 thomas Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/geqo.sgml,v 1.12 2000/09/18 20:11:37 petere Exp $
Genetic Optimizer
-->
@@ -233,7 +233,7 @@ P''(t) generation of descendants at a time t
<sect1>
<title>Future Implementation Tasks for
- <productname>ame>Post</productname>ame> <acronym>GEQO</acronym></title>
+ <productname>PostgreSQL</> <acronym>GEQO</acronym></title>
<sect2>
<title>Basic Improvements</title>
diff --git a/doc/src/sgml/odbc.sgml b/doc/src/sgml/odbc.sgml
index a50f1f8bb59..b4d1826550a 100644
--- a/doc/src/sgml/odbc.sgml
+++ b/doc/src/sgml/odbc.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.17 2000/09/18 20:11:37 petere Exp $
-->
<chapter id="odbc">
@@ -70,496 +70,69 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07
same calls and the back end data source would look the same (to the Windows
app).
</para>
-
-<!--
- <para>
- <ulink url="http://www.insightdist.com/">Insight Distributors</ulink>
- provides active and ongoing
- support for the core <productname>psqlODBC</productname> distribution.
- They provide a
- <ulink url="http://www.insightdist.com/psqlodbc/"><acronym>FAQ</acronym></ulink>,
- ongoing development on the code base, and actively participate on the
- <ulink url="mailto:interfaces@postgresql.org">interfaces mailing list</ulink>.
- </para>
--->
</sect1>
<sect1>
- <title><productname>Windows</productname> Applications</title>
+ <title>Installation</title>
<para>
- In the real world, differences in drivers and the level of
- <acronym>ODBC</acronym> support
- lessens the potential of <acronym>ODBC</acronym>:
-
- <itemizedlist spacing="compact" mark="bullet">
- <listitem>
- <para>
- Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly.
- </para>
- </listitem>
- <listitem>
- <para>
- Under C++, such as Visual C++,
- you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>.
- </para>
- </listitem>
-
- <listitem>
- <para>
- In Visual C++, you can use the CRecordSet class, which wraps the
- <acronym>ODBC</acronym> <acronym>API</acronym>
- set within an MFC 4.2 class. This is the easiest route if you are doing
- Windows C++ development under Windows NT.
- </para>
- </listitem>
- </itemizedlist>
+ The first thing to note about the <productname>psqlODBC</> driver
+ (or any <acronym>ODBC</> driver) is that there must exist a
+ <firstterm>driver manager</> on the system where the
+ <acronym>ODBC</> driver is to be used. There exists a free
+ <acronym>ODBC</> driver for Unix called <productname>iODBC</>
+ which can be obtained via <ulink
+ url="http://www.iodbc.org">http://www.iodbc.org</ulink>.
+ Instructions for installing <productname>iODBC</> are contained in
+ the <productname>iODBC</> distribution. Having said that, any
+ driver manager that you can find for your platform should support
+ the <productname>psqlODBC</> driver, or any other <acronym>ODBC</>
+ driver for that matter.
</para>
- <sect2>
- <title>Writing Applications</title>
-
- <para>
- <quote>
- If I write an application for <productname>Postgres</productname>
- can I write it using <acronym>ODBC</acronym> calls
- to the <productname>Postgres</productname> server,
- or is that only when another database program
- like MS SQL Server or Access needs to access the data?
- </quote>
- </para>
- <para>
- The <acronym>ODBC</acronym> <acronym>API</acronym>
- is the way to go.
- For <productname>Visual C++</productname> coding you can find out more at
- Microsoft's web site or in your <productname>VC++</productname> docs.
- </para>
-
- <para>
- Visual Basic and the other RAD tools have Recordset objects
- that use <acronym>ODBC</acronym>
- directly to access data. Using the data-aware controls, you can quickly
- link to the <acronym>ODBC</acronym> back end database
- (<emphasis>very</emphasis> quickly).
- </para>
-
- <para>
- Playing around with MS Access will help you sort this out. Try using
- <literal>File->Get External Data</literal>.
- </para>
-
- <tip>
- <para>
- You'll have to set up a DSN first.
- </para>
- </tip>
-
- <!--
- <Para>
- <Tip>
- <Para>
- The <productname>Postgres</productname> datetime type will break MS Access.
- </Para>
- </Tip>
- -->
- </sect2>
- </sect1>
+ <para>
+ To install <productname>psqlODBC</> you simply need to supply the
+ <option>--enable-odbc</> option to the <filename>configure</> script when you are
+ building the entire <productname>PostgreSQL</> distribution. The library
+ and header files will then automatically be built and installed with the
+ rest of the programs. If you forget that option or want to build the ODBC
+ driver later you can change into the directory <filename>src/interfaces/odbc</>
+ and do <literal>make</> and <literal>make install</> there.
+ </para>
- <sect1>
- <title>Unix Installation</title>
+ <para>
+ The installation-wide configuration file <filename>odbcinst.ini</> will be
+ installed into the directory <filename>/usr/local/pgsql/etc/</>, or equivalent,
+ depending on what <option>--prefix</> and/or <option>--sysconfdir</> options
+ you supplied to <filename>configure</>. Since this file can also be shared
+ between different <acronym>ODBC</> drivers you can also install it in a shared
+ location. To do that, override the location of this file with the
+ <option>--with-odbcinst</> option.
+ </para>
<para>
- <productname>ApplixWare</productname> has an
- <acronym>ODBC</acronym> database interface
- supported on at least some platforms.
- <productname>ApplixWare</productname> v4.4.2 has been
- demonstrated under Linux with <productname>Postgres</productname> v7.0
- using the <productname>psqlODBC</productname>
- driver contained in the <productname>Postgres</productname> distribution.
+ Additionally, you should install the ODBC catalog extensions. That will
+ provide a number of functions mandated by the ODBC standard that are not
+ supplied by <productname>PostgreSQL</> by default. The file
+ <filename>/usr/local/pgsql/share/odbc.sql</> (in the default installation layout)
+ contains the appropriate definitions, which you can install as follows:
+<programlisting>
+psql -d template1 -f <replaceable>LOCATION</>/odbc.sql
+</programlisting>
+ where specifying <literal>template1</literal> as the target
+ database will ensure that all subsequent new databases will
+ have these same definitions.
</para>
<sect2>
- <title>Building the Driver</title>
-
- <para>
- The first thing
- to note about the <productname>psqlODBC</productname> driver
- (or any <acronym>ODBC</acronym> driver) is that there must
- exist a driver manager on the system where
- the <acronym>ODBC</acronym> driver is to be
- used. There exists a freeware <acronym>ODBC</acronym> driver for Unix
- called <productname>iodbc</productname> which
- can be obtained from various locations on the Net, including at
- <ulink url="http://www.as220.org/FreeODBC/iodbc-2.12.shar.Z">AS200</ulink>.
- Instructions for installing <productname>iodbc</productname>
- are beyond the scope of this
- document, but there is a <filename>README</filename>
- that can be found inside the <productname>iodbc</productname> compressed
- .shar file that should explain how to get it up and running.
- </para>
-
- <para>
- Having said that, any driver manager that you can find for your platform
- should support the <productname>psqlODBC</productname> driver
- or any <acronym>ODBC</acronym> driver.
- </para>
-
- <para>
- The Unix configuration files for <productname>psqlODBC</productname>
- have recently been extensively
- reworked to allow for easy building on supported platforms as
- well as to allow for support of other Unix platforms in the future.
- The new configuration and build files for the driver should make it
- a simple process to build the driver on the supported platforms. Currently
- these include Linux and FreeBSD but we are hoping other users will
- contribute the necessary information to quickly expand the number of
- platforms for which the driver can be built.
- </para>
-
- <para>
- There are actually two separate methods to build the driver depending on
- how you received it and these differences come down to only where and how to
- run <application>configure</application> and <application>make</application>.
- The driver can be built in a standalone, client-only installation, or can be
- built as a part of the main <productname>Postgres</productname> distribution.
- The standalone installation is convenient if you have <acronym>ODBC</acronym>
- client applications on multiple, heterogeneous platforms. The integrated
- installation is convenient when the target client is the same as the
- server, or when the client and server have similar runtime configurations.
- </para>
-
- <para>
- Specifically if you have received the <productname>psqlODBC</productname>
- driver as part of the <productname>Postgres</productname> distribution
- (from now on referred to as an "integrated" build) then you will
- configure and make the <acronym>ODBC</acronym> driver
- from the top level source directory
- of the <productname>Postgres</productname> distribution
- along with the rest of its libraries.
- If you received the driver as a standalone package than you will run
- configure and make from the directory in which you unpacked the
- driver source.
- </para>
-
- <procedure>
- <title>Integrated Installation</title>
-
- <para>
- This installation procedure is appropriate for an integrated installation.
- </para>
-
- <step performance="required">
- <para>
- Specify the <option>--with-odbc</option>
- command-line argument for <application>src/configure</application>:
-
- <programlisting>
-% ./configure --with-odbc
-% make
- </programlisting>
- </para>
- </step>
-
- <step performance="required">
- <para>
- Rebuild the <productname>Postgres</productname> distribution:
-
- <programlisting>
-% make install
- </programlisting>
- </para>
- </step>
-
- <step performance="optional">
- <para>
- Install the ODBC catalog extensions available in
- <filename>PGROOT/contrib/odbc/odbc.sql</filename>:
-
- <programlisting>
-% psql -e template1 &lt; $PGROOT/contrib/odbc/odbc.sql
- </programlisting>
-
- where specifying <literal>template1</literal> as the target
- database will ensure that all subsequent new databases will
- have these same definitions.
- </para>
- </step>
- </procedure>
-
+ <title>Supported Platforms</title>
<para>
- Once configured, the <acronym>ODBC</acronym> driver will be built and installed
- into the areas defined for the other components of the
- <productname>Postgres</productname> system. The installation-wide
- <acronym>ODBC</acronym> configuration file will be placed into
- the top directory of the Postgres target tree (<envar>POSTGRESDIR</envar>).
- This can be overridden from the <application>make</application> command-line
- as
- <programlisting>
-% make ODBCINST=<replaceable>filename</replaceable> install
- </programlisting>
+ <productname>psqlODBC</productname> has been built and tested
+ on <productname>Linux</productname>. There have been reports of success
+ with FreeBSD and with Solaris. There are no known restrictions
+ on the basic code for other platforms which already support
+ <productname>Postgres</productname>.
</para>
-
- <procedure>
- <title>Pre-v6.4 Integrated Installation</title>
-
- <para>
- If you have a <productname>Postgres</productname> installation older than
- v6.4, you have the original source tree available,
- and you want to use the newest version of the <acronym>ODBC</acronym>
- driver, then you may want to try this form of installation.
- </para>
-
- <step performance="required">
- <para>
- Copy the output tar file to your target system and unpack it into a
- clean directory.
- </para>
- </step>
- <step performance="required">
- <para>
- From the directory containing the
- sources, type:
-
- <programlisting>
-% ./configure
-% make
-% make POSTGRESDIR=<replaceable class="parameter">PostgresTopDir</replaceable> install
- </programlisting>
- </para>
- </step>
-
- <step performance="optional">
- <para>
- If you would like to install components into different trees,
- then you can specify various destinations explicitly:
-
- <programlisting>
-% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir ODBCINST=instfile install
- </programlisting>
- </para>
- </step>
- </procedure>
-
- <procedure>
- <title>Standalone Installation</title>
-
- <para>
- A standalone installation is not integrated with or built on the normal
- <productname>Postgres</productname> distribution. It should be best suited
- for building the <acronym>ODBC</acronym> driver for multiple, heterogeneous
- clients who do not have a locally-installed <productname>Postgres</productname>
- source tree.
- </para>
-
- <para>
- The default location for libraries and headers
- for the standalone installation is <filename>/usr/local/lib</filename>
- and <filename>/usr/local/include/iodbc</filename>, respectively.
- There is another system wide configuration file that gets installed
- as <filename>/share/odbcinst.ini</filename> (if <filename>/share</filename>
- exists) or as <filename>/etc/odbcinst.ini</filename>
- (if <filename>/share</filename> does not exist).
- </para>
-
- <note>
- <para>
- Installation of files into <filename>/share</filename>
- or <filename>/etc</filename> requires system root privileges.
- Most installation steps for <productname>Postgres</productname> do not
- have this requirement, and you can choose another destination which
- is writable by your non-root <productname>Postgres</productname> superuser
- account instead.
- </para>
- </note>
-
- <step performance="required">
- <para>
- The standalone installation distribution can be built from the
- <productname>Postgres</productname> distribution or may be obtained from
- <ulink url="http://www.insightdist.com/psqlodbc">Insight Distributors</ulink>,
- the current maintainers of the non-Unix sources.
- </para>
-
- <para>
- Copy the zip
- or gzipped tarfile to an empty directory. If using the zip package
- unzip it with the command
- <programlisting>
-% unzip -a <replaceable>packagename</replaceable>
- </programlisting>
-
- The <option>-a</option> option
- is necessary to get rid of <acronym>DOS</acronym>
- CR/LF pairs in the source files.
- </para>
-
- <para>
- If you have the gzipped tar package than simply run
-
- <programlisting>
-% tar -xzf <replaceable>packagename</replaceable>
- </programlisting>
- </para>
-
- <substeps>
-
- <step performance="optional">
- <para>
- To create a tar file for a complete standalone installation
- from the main <productname>Postgres</productname> source tree:
- </para>
- </step>
- </substeps>
- </step>
- <step performance="required">
- <para>
- Configure the main <productname>Postgres</productname> distribution.
- </para>
- </step>
- <step performance="required">
- <para>
- Create the tar file:
-
- <programlisting>
-% cd interfaces/odbc
-% make standalone
- </programlisting>
- </para>
- </step>
-
- <step performance="required">
- <para>
- Copy the output tar file to your target system. Be sure to transfer as
- a binary file if using <application>ftp</application>.
- </para>
- </step>
-
- <step performance="required">
- <para>
- Unpack the tar file into a clean
- directory.
- </para>
- </step>
-
- <step performance="required">
- <para>
- Configure the standalone installation:
-
- <programlisting>
-% ./configure
- </programlisting>
- </para>
-
- <para>
- The configuration can be done with options:
-
- <programlisting>
-% ./configure --prefix=<replaceable>rootdir</replaceable> --with-odbc=<replaceable>inidir</replaceable>
- </programlisting>
-
- where <option>--prefix</option> installs the libraries and headers in
- the directories <filename><replaceable>rootdir</replaceable>/lib</filename> and
- <filename><replaceable>rootdir</replaceable>/include/iodbc</filename>, and
- <option>--with-odbc</option> installs <filename>odbcinst.ini</filename> in the
- specified directory.
- </para>
-
- <para>
- Note that both of these options can also be used from the integrated build
- but be aware that <emphasis>when used in the integrated build</emphasis>
- <option>--prefix</option> will also apply to the rest of
- your <productname>Postgres</productname> installation.
- <option>--with-odbc</option> applies only to the configuration file
- <filename>odbcinst.ini</filename>.
- </para>
- </step>
-
- <step performance="required">
- <para>
- Compile and link the source code:
-
- <programlisting>
-% make ODBCINST=<replaceable>instdir</replaceable>
- </programlisting>
- </para>
-
- <para>
- You can also override the default location for installation on the
- 'make' command line. This only applies to the installation of the
- library and header files. Since the driver needs to know the location
- of the odbcinst.ini file attempting to override the enviroment variable
- that specifies its installation directory will probably cause you
- headaches. It is safest simply to allow the driver to install the
- odbcinst.ini file in the default directory or the directory you specified
- on the './configure' command line with --with-odbc.
- </para>
- </step>
-
- <!--
- This doesn't currently work - thomas 1998-10-19
- <tip>
- <para>
- <envar>ODBCINST</envar> can be specified during configuration or during
- the compilation. It is not necessary to do so in both steps.
- </tip>
- -->
-
- <step performance="required">
- <para>
- Install the source code:
-
- <programlisting>
-% make POSTGRESDIR=<replaceable>targettree</replaceable> install
- </programlisting>
- </para>
-
- <para>
- To override the library and header installation directories separately
- you need to pass the correct installation variables on the
- <literal>make install</literal> command line. These variables are
- <envar>LIBDIR</envar>, <envar>HEADERDIR</envar>
- and <envar>ODBCINST</envar>.
- Overriding <envar>POSTGRESDIR</envar> on the make command line will cause
- <envar>LIBDIR</envar> and <envar>HEADERDIR</envar>
- to be rooted at the new directory you specify.
- <envar>ODBCINST</envar> is independent of <envar>POSTGRESDIR</envar>.
- </para>
-
- <para>
- Here is how you would specify the various destinations explicitly:
-
- <programlisting>
-% make BINDIR=<replaceable>bindir</replaceable> LIBDIR=<replaceable>libdir</replaceable> HEADERDIR=<replaceable>headerdir</replaceable> install
- </programlisting>
- </para>
-
- <para>
- For example, typing
-
- <programlisting>
-% make POSTGRESDIR=/opt/psqlodbc install
- </programlisting>
-
- (after you've used
- <application>./configure</application> and <application>make</application>)
- will cause the libraries and headers to be installed in the directories
- <filename>/opt/psqlodbc/lib</filename>
- and <filename>/opt/psqlodbc/include/iodbc</filename> respectively.
- </para>
-
- <para>
- The command
-
- <programlisting>
-% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install
- </programlisting>
-
- should cause the libraries to be installed in /opt/psqlodbc/lib and
- the headers in /usr/local/include/iodbc. If this doesn't work as
- expected please contact one of the maintainers.
- </para>
- </step>
- </procedure>
</sect2>
</sect1>
@@ -584,7 +157,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/odbc.sgml,v 1.16 2000/08/29 20:02:07
<literal>[ODBC Data Sources]</literal> and must contain the following entries:
<programlisting>
-Driver = <replaceable>POSTGRESDIR</replaceable>/lib/libpsqlodbc.so
+Driver = <replaceable>prefix</replaceable>/lib/libpsqlodbc.so
Database=<replaceable>DatabaseName</replaceable>
Servername=localhost
Port=5432
@@ -648,8 +221,100 @@ InstallDir = /opt/applix/axdata/axshlib
</sect1>
<sect1>
+ <title><productname>Windows</productname> Applications</title>
+
+ <para>
+ In the real world, differences in drivers and the level of
+ <acronym>ODBC</acronym> support
+ lessens the potential of <acronym>ODBC</acronym>:
+
+ <itemizedlist spacing="compact" mark="bullet">
+ <listitem>
+ <para>
+ Access, Delphi, and Visual Basic all support <acronym>ODBC</acronym> directly.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Under C++, such as Visual C++,
+ you can use the C++ <acronym>ODBC</acronym> <acronym>API</acronym>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ In Visual C++, you can use the CRecordSet class, which wraps the
+ <acronym>ODBC</acronym> <acronym>API</acronym>
+ set within an MFC 4.2 class. This is the easiest route if you are doing
+ Windows C++ development under Windows NT.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <sect2>
+ <title>Writing Applications</title>
+
+ <para>
+ <quote>
+ If I write an application for <productname>Postgres</productname>
+ can I write it using <acronym>ODBC</acronym> calls
+ to the <productname>Postgres</productname> server,
+ or is that only when another database program
+ like MS SQL Server or Access needs to access the data?
+ </quote>
+ </para>
+ <para>
+ The <acronym>ODBC</acronym> <acronym>API</acronym>
+ is the way to go.
+ For <productname>Visual C++</productname> coding you can find out more at
+ Microsoft's web site or in your <productname>VC++</productname> docs.
+ </para>
+
+ <para>
+ Visual Basic and the other RAD tools have Recordset objects
+ that use <acronym>ODBC</acronym>
+ directly to access data. Using the data-aware controls, you can quickly
+ link to the <acronym>ODBC</acronym> back end database
+ (<emphasis>very</emphasis> quickly).
+ </para>
+
+ <para>
+ Playing around with MS Access will help you sort this out. Try using
+ <literal>File->Get External Data</literal>.
+ </para>
+
+ <tip>
+ <para>
+ You'll have to set up a DSN first.
+ </para>
+ </tip>
+
+ <!--
+ <Para>
+ <Tip>
+ <Para>
+ The <productname>Postgres</productname> datetime type will break MS Access.
+ </Para>
+ </Tip>
+ -->
+ </sect2>
+ </sect1>
+
+
+ <sect1>
<title>ApplixWare</title>
+ <para>
+ <productname>ApplixWare</productname> has an
+ <acronym>ODBC</acronym> database interface
+ supported on at least some platforms.
+ <productname>ApplixWare</productname> 4.4.2 has been
+ demonstrated under Linux with <productname>Postgres</productname> 7.0
+ using the <productname>psqlODBC</productname>
+ driver contained in the <productname>Postgres</productname> distribution.
+ </para>
+
<sect2>
<title>Configuration</title>
@@ -1089,17 +754,7 @@ endmacro
</caution>
</para>
</sect2>
- <sect2>
- <title>Supported Platforms</title>
- <para>
- <productname>psqlODBC</productname> has been built and tested
- on <productname>Linux</productname>. There have been reports of success
- with FreeBSD and with Solaris. There are no known restrictions
- on the basic code for other platforms which already support
- <productname>Postgres</productname>.
- </para>
- </sect2>
</sect1>
</chapter>
diff --git a/doc/src/sgml/page.sgml b/doc/src/sgml/page.sgml
index 0e93f3e4c71..8817c3c290e 100644
--- a/doc/src/sgml/page.sgml
+++ b/doc/src/sgml/page.sgml
@@ -21,9 +21,6 @@ is assumed to contain 8 bits. In addition, the term
refers to data which is stored in <productname>Postgres</productname> classes.
</para>
-<sect1>
-<title>Page Structure</title>
-
<para>
The following table shows how pages in both normal <productname>Postgres</productname> classes
and <productname>Postgres</productname> index
@@ -176,50 +173,5 @@ itemPointerData
which points to the next piece and the piece itself. The last piece
is handled normally.
</para>
-</sect1>
-
-<sect1>
-<title>Files</title>
-
-<para>
-<variablelist>
-<varlistentry>
-<term>
-<filename>data/</filename>
-</term>
-<listitem>
-<para>
-Location of shared (global) database files.
-</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
-<term>
-<filename>data/base/</filename>
-</term>
-<listitem>
-<para>
-Location of local database files.
-</para>
-</listitem>
-</varlistentry>
-</variablelist>
-</para>
-</sect1>
-
-<sect1>
-<title>Bugs</title>
-
-<para>
-The page format may change in the future to provide more efficient
-access to large objects.
-</para>
-
-<para>
-This section contains insufficient detail to be of any assistance in
-writing a new access method.
-</para>
-</sect1>
</chapter>
diff --git a/src/interfaces/odbc/GNUmakefile b/src/interfaces/odbc/GNUmakefile
index 81c16387ca9..a51f71899ac 100644
--- a/src/interfaces/odbc/GNUmakefile
+++ b/src/interfaces/odbc/GNUmakefile
@@ -2,7 +2,7 @@
#
# GNUMakefile for psqlodbc (Postgres ODBC driver)
#
-# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/GNUmakefile,v 1.3 2000/09/17 13:02:51 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/GNUmakefile,v 1.4 2000/09/18 20:11:37 petere Exp $
#
#-------------------------------------------------------------------------
@@ -35,21 +35,27 @@ LDFLAGS_SL+= $(LDFLAGS_ODBC)
odbc_headers = isql.h isqlext.h iodbc.h
odbc_includedir = $(includedir)/iodbc
-install: all installdirs install-headers install-ini install-lib
+install: all installdirs install-headers install-ini install-lib install-data
installdirs:
- $(mkinstalldirs) $(DESTDIR)$(odbc_includedir) $(DESTDIR)$(libdir) $(DESTDIR)$(odbcinst_ini_dir)
+ $(mkinstalldirs) $(DESTDIR)$(odbc_includedir) $(DESTDIR)$(libdir) $(DESTDIR)$(odbcinst_ini_dir) $(DESTDIR)$(datadir)
.PHONY: install-headers
install-headers: $(odbc_headers)
- for i in $^; do $(INSTALL_DATA) $$i $(DESTDIR)$(odbc_includedir) || exit 1; done
+ for i in $^; do $(INSTALL_DATA) $$i $(DESTDIR)$(odbc_includedir)/$$i || exit 1; done
.PHONY: install-ini
install-ini: odbcinst.ini
- $(INSTALL_DATA) $< $(DESTDIR)$(odbcinst_ini_dir)
+ $(INSTALL_DATA) $< $(DESTDIR)$(odbcinst_ini_dir)/$<
+
+.PHONY: install-data
+install-data: odbc.sql
+ $(INSTALL_DATA) $< $(DESTDIR)$(datadir)/$<
uninstall: uninstall-lib
rm -f $(addprefix $(DESTDIR)$(odbc_includedir)/, $(odbc_headers))
+ rm -f $(DESTDIR)$(datadir)/odbc.sql
+# XXX Uninstall the .ini file as well?
clean distclean maintainer-clean: clean-lib
rm -f $(OBJS)
diff --git a/contrib/odbc/odbc.sql b/src/interfaces/odbc/odbc.sql
index bec7f486b4f..f4e593d329a 100644
--- a/contrib/odbc/odbc.sql
+++ b/src/interfaces/odbc/odbc.sql
@@ -1,16 +1,11 @@
--- ODBC.sql
---
+-- PostgreSQL catalog extensions for ODBC compliance
+-- $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/odbc.sql,v 1.1 2000/09/18 20:11:37 petere Exp $
---
--- Character string manipulation
---
---
--- Extensions for ODBC compliance in v7.0.
-- In the current driver, ODBC functions must map directly into a
-- Postgres function. So in some cases we must create a compatible
-- function.
---
+
-- truncate on the left
CREATE FUNCTION ltrunc(text, integer)
@@ -142,4 +137,3 @@ CREATE FUNCTION odbc_user()
RETURNS text
AS 'SELECT CAST(USER AS text)'
LANGUAGE 'SQL';
-