mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Update source code to Byron's v6.30.0250 sources plus minor cleanup
to get rid of unused variables. Get clean compile on Linux (Thomas and Gerald). Implement autoconf/configure for standalone builds and use the existing autoconf/configure system when in the Postgres source tree. Code tests and functions with ApplixWare-4.4.1beta on a Linux box. Changes should be backward compatible with WIN32 but still needs testing.
This commit is contained in:
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
127
src/interfaces/odbc/GNUmakefile.in
Normal file
127
src/interfaces/odbc/GNUmakefile.in
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Makefile.inc--
|
||||||
|
# Build and install postgres.
|
||||||
|
#
|
||||||
|
# Copyright (c) 1994, Regents of the University of California
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IDENTIFICATION
|
||||||
|
# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/GNUmakefile.in,v 1.1 1998/10/06 05:57:56 thomas Exp $
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
@SET_MAKE@
|
||||||
|
|
||||||
|
NAME = psqlodbc
|
||||||
|
SRCDIR=@srcdir@
|
||||||
|
ODBCSRCDIR=@srcdir@
|
||||||
|
include $(ODBCSRCDIR)/Makefile.global
|
||||||
|
|
||||||
|
include Version.mk
|
||||||
|
PORTNAME= @PORTNAME@
|
||||||
|
|
||||||
|
FIND = @find@
|
||||||
|
|
||||||
|
# assuming gnu tar and split here
|
||||||
|
TAR = @tar@
|
||||||
|
SPLIT = @split@
|
||||||
|
|
||||||
|
ifeq ($(PORTNAME), linux)
|
||||||
|
install-shlib-dep := install-shlib
|
||||||
|
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
|
||||||
|
LDFLAGS_SL = -shared -soname lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
|
||||||
|
LDFLAGS_SL += -Bsymbolic $(LDFLAGS) -lc -lm
|
||||||
|
CFLAGS += -I. $(CFLAGS_SL)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(PORTNAME), bsd)
|
||||||
|
ifdef BSD_SHLIB
|
||||||
|
install-shlib-dep := install-shlib
|
||||||
|
shlib := lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)
|
||||||
|
LDFLAGS_SL = -x -Bshareable -Bforcearchive $(LDFLAGS)
|
||||||
|
CFLAGS += -I. $(CFLAGS_SL)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
SOURCES = *.c *.h *.in Config.mk Makefile Makefile.unx README.Linux \
|
||||||
|
TODO.txt Version.mk config.guess config.sub configure \
|
||||||
|
install-sh license.txt notice.txt odbcinst.ini patch \
|
||||||
|
psqlodbc.aps psqlodbc.def psqlodbc.mak psqlodbc.mdp \
|
||||||
|
psqlodbc.ncb psqlodbc.rc readme.txt
|
||||||
|
|
||||||
|
OBJECTS = info.o bind.o columninfo.o connection.o convert.o drvconn.o \
|
||||||
|
environ.o execute.o lobj.o misc.o options.o \
|
||||||
|
pgtypes.o psqlodbc.o qresult.o results.o socket.o parse.o statement.o \
|
||||||
|
gpps.o tuple.o tuplelist.o dlg_specific.o $(OBJX)
|
||||||
|
|
||||||
|
CFLAGS += @DEFS@
|
||||||
|
|
||||||
|
all: libpsqlodbc.a $(shlib)
|
||||||
|
|
||||||
|
libpsqlodbc.a: $(OBJECTS)
|
||||||
|
$(AR) $(AROPT) libpsqlodbc.a $(OBJS)
|
||||||
|
$(RANLIB) libpsqlodbc.a
|
||||||
|
|
||||||
|
$(shlib): $(OBJECTS)
|
||||||
|
$(LD) $(LDFLAGS_SL) $(OBJECTS) \
|
||||||
|
-o $(shlib) $(LIBS)
|
||||||
|
|
||||||
|
.PHONY: beforeinstall-headers
|
||||||
|
|
||||||
|
.PHONY: install
|
||||||
|
|
||||||
|
install: $(HEADERDIR) $(LIBDIR) $(ODBCINST) install-headers \
|
||||||
|
install-libpsqlodbc install-ini $(install-shlib-dep)
|
||||||
|
|
||||||
|
$(HEADERDIR) $(LIBDIR) $(ODBCINST):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
install-headers: beforeinstall-headers isql.h isqlext.h iodbc.h
|
||||||
|
$(INSTALL) $(INSTLOPTS) iodbc.h $(HEADERDIR)/iodbc/iodbc.h
|
||||||
|
$(INSTALL) $(INSTLOPTS) isql.h $(HEADERDIR)/iodbc/isql.h
|
||||||
|
$(INSTALL) $(INSTLOPTS) isqlext.h $(HEADERDIR)/iodbc/isqlext.h
|
||||||
|
|
||||||
|
beforeinstall-headers:
|
||||||
|
@if [ ! -d $(HEADERDIR)/iodbc ]; then mkdir -p $(HEADERDIR)/iodbc; fi
|
||||||
|
|
||||||
|
install-libpsqlodbc: libpsqlodbc.a
|
||||||
|
$(INSTALL) $(INSTL_LIB_OPTS) libpsqlodbc.a $(DESTDIR)$(LIBDIR)/lib$(NAME).a
|
||||||
|
|
||||||
|
install-shlib: $(shlib)
|
||||||
|
$(INSTALL) $(INSTL_LIB_OPTS) $(shlib) $(DESTDIR)$(LIBDIR)/$(shlib)
|
||||||
|
rm -f $(DESTDIR)$(LIBDIR)/lib$(NAME)$(DLSUFFIX)
|
||||||
|
rm -f $(DESTDIR)$(LIBDIR)/lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
|
||||||
|
cd $(DESTDIR)$(LIBDIR) && $(LN_S) -f $(shlib) lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
|
||||||
|
cd $(DESTDIR)$(LIBDIR) && $(LN_S) -f lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION) lib$(NAME)$(DLSUFFIX)
|
||||||
|
|
||||||
|
install-ini: odbcinst.ini
|
||||||
|
$(INSTALL) $(INSTL_LIB_OPTS) odbcinst.ini $(ODBCINST)/odbcinst.ini
|
||||||
|
|
||||||
|
depend dep:
|
||||||
|
$(CC) -MM *.c >depend
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm -f lib$(NAME).a $(shlib) $(OBJECTS) lib$(NAME)$(DLSUFFIX)
|
||||||
|
-rm -f config.log config.cache config.status
|
||||||
|
|
||||||
|
.PHONY: distclean
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
-rm -f config.h GNUmakefile Makefile.global
|
||||||
|
|
||||||
|
.PHONY: standalone
|
||||||
|
|
||||||
|
standalone:
|
||||||
|
-rm -f psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION).tar.gz
|
||||||
|
tar -cf psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION).tar $(SOURCES)
|
||||||
|
tar -r -C ../.. -f psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION).tar template
|
||||||
|
gzip psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION).tar
|
||||||
|
|
||||||
|
.PHONY: integrated
|
||||||
|
|
||||||
|
integrated:
|
||||||
|
-rm -f psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION)-int.tar.gz
|
||||||
|
tar -cf psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION)-int.tar $(SOURCES)
|
||||||
|
gzip psqlodbc-$(SO_MAJOR_VERSION)$(SO_MINOR_VERSION)-int.tar
|
201
src/interfaces/odbc/Makefile.global.in
Normal file
201
src/interfaces/odbc/Makefile.global.in
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
#----------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Makefile.global--
|
||||||
|
# global configuration for the Makefiles
|
||||||
|
#
|
||||||
|
# Copyright (c) 1994, Regents of the University of California
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# IDENTIFICATION
|
||||||
|
# $Header: /cvsroot/pgsql/src/interfaces/odbc/Attic/Makefile.global.in,v 1.1 1998/10/06 05:57:56 thomas Exp $
|
||||||
|
#
|
||||||
|
# NOTES
|
||||||
|
# This is derived from the main Postgres makefile.
|
||||||
|
#
|
||||||
|
# When running standalone:
|
||||||
|
# To override the default setting, create a Makefile.custom in this
|
||||||
|
# directory and put your defines there. (Makefile.custom is included
|
||||||
|
# near the end of this file). Sometimes, a variable gets set in
|
||||||
|
# Makefile.global after Makefile.custom has been included, so you can't
|
||||||
|
# simply set that variable in Makefile.custom. In those cases, there is
|
||||||
|
# often another variable (like CUSTOM_COPT) that you can set in
|
||||||
|
# Makefile.custom that influences the later setting of the true variable
|
||||||
|
# of interest (like CFLAGS) by Makefile.global.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# If you change any of these defines you probably have to
|
||||||
|
# make clean; make
|
||||||
|
# since no dependencies are created for these. (of course you can
|
||||||
|
# be crafty and check what files really depend on them and just remake
|
||||||
|
# those).
|
||||||
|
#
|
||||||
|
# Before including this file, you must set the SRCDIR variable to the
|
||||||
|
# path of the top of the Postgres source tree (the directory that
|
||||||
|
# contains this file).
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# CONFIGURATION SECTION
|
||||||
|
#
|
||||||
|
# Following are settings pertaining to the postgres build and
|
||||||
|
# installation.
|
||||||
|
# of the port.
|
||||||
|
#
|
||||||
|
# Ignore LINUX_ELF if you're not using Linux. But if you are, and you're
|
||||||
|
# compiling to a.out (which means you're using the dld dynamic loading
|
||||||
|
# library), set LINUX_ELF to null in Makefile.custom.
|
||||||
|
LINUX_ELF= true
|
||||||
|
#
|
||||||
|
# Ignore BSD_SHLIB if you're not using one of the BSD ports. But if you
|
||||||
|
# are, and it's one that doesn't have shared libraries (NetBSD/vax is an
|
||||||
|
# example of this), set BSD_SHLIB to null in Makefile.custom.
|
||||||
|
BSD_SHLIB= true
|
||||||
|
|
||||||
|
# For convenience, POSTGRESDIR is where BINDIR, and LIBDIR
|
||||||
|
# and other target destinations are rooted. Of course, each of these is
|
||||||
|
# changable separately.
|
||||||
|
|
||||||
|
POSTGRESDIR=@prefix@
|
||||||
|
|
||||||
|
# Where the postgres executables live (changeable by just putting them
|
||||||
|
# somewhere else and putting that directory in your shell PATH)
|
||||||
|
BINDIR= $(POSTGRESDIR)/bin
|
||||||
|
|
||||||
|
# Where libpsqlodbc.a gets installed. You must put it where your loader will
|
||||||
|
# look for it if you wish to use the -lpq convention. Otherwise you
|
||||||
|
# can just put the absolute pathname to the library at the end of your
|
||||||
|
# command line.
|
||||||
|
|
||||||
|
LIBDIR= $(POSTGRESDIR)/lib
|
||||||
|
|
||||||
|
# Where the man pages (suitable for use with "man") get installed.
|
||||||
|
POSTMANDIR= $(POSTGRESDIR)/man
|
||||||
|
|
||||||
|
# Where the formatted documents (e.g., the reference manual) get installed.
|
||||||
|
POSTDOCDIR= $(POSTGRESDIR)/doc
|
||||||
|
|
||||||
|
# Where the header files necessary to build frontend programs get installed.
|
||||||
|
HEADERDIR= $(POSTGRESDIR)/include
|
||||||
|
|
||||||
|
# Where the odbcinst.ini file will be placed
|
||||||
|
|
||||||
|
ODBCINST= $(POSTGRESDIR)@ODBCINSTDIR@
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# FEATURES
|
||||||
|
#
|
||||||
|
# To disable a feature, comment out the entire definition
|
||||||
|
# (that is, prepend '#', don't set it to "0" or "no").
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Installation.
|
||||||
|
#
|
||||||
|
# For many ports, INSTALL is overridden below.
|
||||||
|
INSTALL= @INSTALL@
|
||||||
|
RANLIB= @RANLIB@
|
||||||
|
|
||||||
|
INSTLOPTS= @INSTLOPTS@
|
||||||
|
INSTL_EXE_OPTS= @INSTL_EXE_OPTS@
|
||||||
|
INSTL_LIB_OPTS= @INSTL_LIB_OPTS@
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# For building shell scripts:
|
||||||
|
#
|
||||||
|
# For many ports, these are overridden below.
|
||||||
|
|
||||||
|
# DASH_N is what we put before the text on an echo command when we don't
|
||||||
|
# want a trailing newline. BACKSLASH_C is what we put at the end of the
|
||||||
|
# string on a echo command when we don't want a trailing newline. On
|
||||||
|
# some systems, you do echo -n "no newline after this", while on others
|
||||||
|
# you do echo "no newline after this\c".
|
||||||
|
|
||||||
|
DASH_N= @DASH_N@
|
||||||
|
BACKSLASH_C= @BACKSLASH_C@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------
|
||||||
|
# See the subdirectory template for default settings for these
|
||||||
|
#-------------------------------------------------------------
|
||||||
|
CC= @CC@
|
||||||
|
AROPT= @AROPT@
|
||||||
|
CFLAGS= -I$(ODBCSRCDIR) @CPPFLAGS@ @CFLAGS@
|
||||||
|
CFLAGS_SL= @SHARED_LIB@
|
||||||
|
LDFLAGS= @LDFLAGS@ @LIBS@
|
||||||
|
DLSUFFIX= @DLSUFFIX@
|
||||||
|
LN_S = @LN_S@
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Customization.
|
||||||
|
#
|
||||||
|
# This includes local customizations. If we're being build from
|
||||||
|
# within the Postgres distribution and a Makefile.custom exists
|
||||||
|
# in the top level Postgres directory it overrides any local customization
|
||||||
|
# that might be in Makefile.custom of the odbc driver directory. These
|
||||||
|
# files don't exist in the original
|
||||||
|
# distribution so that they don't get overwritten when you upgrade.
|
||||||
|
|
||||||
|
ifneq ($(wildcard $(SRCDIR)/Makefile.custom), )
|
||||||
|
include $(SRCDIR)/Makefile.custom
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(wildcard ../../Makefile.custom), )
|
||||||
|
include ../../Makefile.custom
|
||||||
|
endif
|
||||||
|
|
||||||
|
# This goes here so that customization in Makefile.custom is effective
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
ifneq ($(CUSTOM_INSTALL),)
|
||||||
|
INSTALL= $(CUSTOM_INSTALL)
|
||||||
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# Flags for CC and LD.
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# COPT
|
||||||
|
#
|
||||||
|
# COPT is for options that the sophisticated builder might want to vary
|
||||||
|
# from one build to the next, like options to build Postgres with debugging
|
||||||
|
# information included. COPT is meant to be set on the make command line,
|
||||||
|
# for example with the command "make COPT=-g". The value you see set here
|
||||||
|
# is the default that gets used if the builder does not give a value for
|
||||||
|
# COPT on his make command.
|
||||||
|
#
|
||||||
|
# There is a nonobvious relationship between -O (optimization) and
|
||||||
|
# -Werror (consider all warnings fatal). On some systems, if you don't
|
||||||
|
# optimize, you will always get some warnings because the system header
|
||||||
|
# files will include some unreferenced functions in the code. These are
|
||||||
|
# functions that are supposed to be inline, so there wouldn't ordinarily
|
||||||
|
# be an "unreferenced" problem, but if you don't enable optimization, no
|
||||||
|
# inlining can happen, and hence the problem. Therefore, we include
|
||||||
|
# if you override -O, you override -Werror as well.
|
||||||
|
#
|
||||||
|
# CUSTOM_COPT is something the user may set in Makefile.custom
|
||||||
|
|
||||||
|
# Common values for COPT are: -g for debuggable binaries, -m486 if you are
|
||||||
|
# using a i486 or better.
|
||||||
|
|
||||||
|
ifneq ($(CUSTOM_CC),)
|
||||||
|
CC= $(CUSTOM_CC)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq ($(CUSTOM_COPT),)
|
||||||
|
COPT= $(CUSTOM_COPT)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CC), gcc)
|
||||||
|
CFLAGS+= -Wall -Wmissing-prototypes
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef COPT
|
||||||
|
CFLAGS+= $(COPT)
|
||||||
|
endif
|
@ -1,85 +0,0 @@
|
|||||||
|
|
||||||
# .include "Version.mk"
|
|
||||||
# .include "Config.mk"
|
|
||||||
include Version.mk
|
|
||||||
include Config.mk
|
|
||||||
#==============================================================================
|
|
||||||
# Makefile
|
|
||||||
#
|
|
||||||
# UNIX Makefile to build the CLI for PostgreSQL/Postgres95
|
|
||||||
#
|
|
||||||
#==============================================================================
|
|
||||||
# Site specific configuration (UNIX)
|
|
||||||
#==============================================================================
|
|
||||||
#
|
|
||||||
# option switches
|
|
||||||
#
|
|
||||||
# debug: select this to enable debugging of the software
|
|
||||||
#DEBUG = -D_DEBUG
|
|
||||||
#
|
|
||||||
#==============================================================================
|
|
||||||
|
|
||||||
#---| definitions |------------------------------------------------------------
|
|
||||||
|
|
||||||
# NAME = cli
|
|
||||||
NAME = psqlodbc
|
|
||||||
|
|
||||||
OBJECTS = info.o bind.o columninfo.o connection.o convert.o drvconn.o \
|
|
||||||
environ.o execute.o lobj.o misc.o options.o \
|
|
||||||
pgtypes.o psqlodbc.o qresult.o results.o socket.o statement.o \
|
|
||||||
gpps.o tuple.o tuplelist.o dlg_specific.o $(OBJX)
|
|
||||||
|
|
||||||
#CFLAGS = -c $(DEBUG) -D$(PG_ENV) -O $(PIC) $(ANSI) -I$(PG_INCLUDE) \
|
|
||||||
# -I$(ODBC_INCLUDE) -D$(DLDAPI) $(CFLAGSX) -DHAVE_CONFIG_H \
|
|
||||||
# -DVERSION=\"$(VERSION)$(EXTVER)\"
|
|
||||||
CFLAGS = -g -c -Wall $(DEBUG) -O $(PIC) $(ANSI) -I. -I.. \
|
|
||||||
-I$(PG_INCLUDE) -I$(ODBC_INCLUDE) $(CFLAGSX) -DHAVE_CONFIG_H
|
|
||||||
|
|
||||||
shlib = lib$(NAME)-$(VERSION).$(DLSUFFIX)
|
|
||||||
DESTDIR = /usr/local
|
|
||||||
LIBDIR = /lib
|
|
||||||
|
|
||||||
#---| global dependencies |----------------------------------------------------
|
|
||||||
|
|
||||||
#all: $(OBJECTS) lib dll
|
|
||||||
|
|
||||||
all: $(OBJECTS) dll
|
|
||||||
|
|
||||||
clean:
|
|
||||||
-rm -f core *.o *~ *.core
|
|
||||||
|
|
||||||
delete: clean
|
|
||||||
|
|
||||||
delete_all: delete
|
|
||||||
-rm -f /usr/local/lib/lib$(NAME)_$(MSQL_ENV).a
|
|
||||||
-rm -f /usr/local/lib/lib$(NAME)_$(MSQL_ENV).$(DLSUFFIX)
|
|
||||||
|
|
||||||
#---| local dependencies |-----------------------------------------------------
|
|
||||||
#log.o: ../SRC_LOG/log.c ../SRC_LOG/log.h
|
|
||||||
# $(CC) $(CFLAGS) -I../SRC_LOG ../SRC_LOG/log.c
|
|
||||||
|
|
||||||
lib:
|
|
||||||
$(AR) lib$(NAME)$(PG_ENV).a $(OBJECTS)
|
|
||||||
$(RANLIB) lib$(NAME)$(PG_ENV).a
|
|
||||||
|
|
||||||
dll: $(OBJECTS)
|
|
||||||
$(LD) $(LDFLAGS) -L$(PG_LIBPATH) $(OBJECTS) \
|
|
||||||
-o $(shlib) $(LIBS) $(PG_LIBS)
|
|
||||||
|
|
||||||
install-shlib: $(shlib)
|
|
||||||
$(INSTALL_DATA) $(shlib) $(DESTDIR)$(LIBDIR)/$(shlib)
|
|
||||||
rm -f $(DESTDIR)$(LIBDIR)/lib$(NAME).so
|
|
||||||
ln -sf $(shlib) $(DESTDIR)$(LIBDIR)/lib$(NAME).so
|
|
||||||
|
|
||||||
install-headers: $(INSTHEADERS)
|
|
||||||
if [ -d $(DESTDIR)$(INCDIR)/iodbc ]; then : ; else $(MKDIR) $(DESTDIR)$(INCDIR)/iodbc; fi
|
|
||||||
$(INSTALL_DATA) $(INSTHEADERS) $(DESTDIR)$(INCDIR)/iodbc
|
|
||||||
|
|
||||||
install-ini: odbcinst.ini
|
|
||||||
$(INSTALL_DATA) odbcinst.ini /etc
|
|
||||||
|
|
||||||
install: install-headers install-shlib install-ini
|
|
||||||
|
|
||||||
#==============================================================================
|
|
||||||
|
|
||||||
|
|
@ -1,113 +0,0 @@
|
|||||||
|
|
||||||
Unix port of psqlodbc, brought to you by:
|
|
||||||
Gerald Gryschuk(ggryschuk@home.com)
|
|
||||||
|
|
||||||
This is the first release of a port of psqlodbc to Unix(specifically Linux),
|
|
||||||
as such the installation may not be as straight forward as it could be(then
|
|
||||||
again it might be). As well the only testing of the driver has been with
|
|
||||||
the real project I'm working on, since it seems to be working there I assumed
|
|
||||||
it was ready to go out. This port works with Ke Jin's iodbc driver manager
|
|
||||||
although there is no theoretical reason why it couldn't work with other
|
|
||||||
driver managers for UNIX(I know of none though). The FreeODBC site
|
|
||||||
(http://users.ids.net/~bjepson/freeODBC/) has a link to download the current
|
|
||||||
version of iodbc(iodbc-2.12).
|
|
||||||
|
|
||||||
This driver has been successfully compiled and tested on a RedHat 4.1 system
|
|
||||||
using both gcc 2.7.2 and egcs 1.0.2.
|
|
||||||
|
|
||||||
INSTALLATION:
|
|
||||||
|
|
||||||
If you have a system any where close to mine this will be easy, just
|
|
||||||
copy Makefile.lnx to Makefile then type 'make' and see what happens. Note
|
|
||||||
that if you have not enabled logging(read the file misc.h) then you
|
|
||||||
may get alot of warning messages, just ignore these, they shouldn't be
|
|
||||||
a problem. If this doesn't work, well... I don't know what to say, see if
|
|
||||||
you can figure out what's wrong,fix it and send me a message. If everything
|
|
||||||
makes o.k. you can 'make install' which will install the shared library
|
|
||||||
(in /usr/local/lib) and a WINDOWS type INI file in /etc (called odbcinst.ini,
|
|
||||||
see CONFIGURATION below). If you want to program using this driver do a
|
|
||||||
'make install-headers' which will install programming header files in
|
|
||||||
/usr/local/include/iodbc. If you don't like these install locations edit
|
|
||||||
Config.mk and change the environment variable DESTDIR(and possible DESTINCDIR
|
|
||||||
to get rid of the /iodbc) to suit your system.
|
|
||||||
|
|
||||||
CONFIGURATION:
|
|
||||||
|
|
||||||
The psqlodbc driver reads two Windows type INI files for configuration,
|
|
||||||
one called odbcinst.ini located in /etc which is used for system wide
|
|
||||||
configuration of the driver and one in the users home directory called
|
|
||||||
.odbc.ini, which can be used to override the system wide settings. Note that
|
|
||||||
the location of odbcinst is currently hardcoded into the source so if you
|
|
||||||
want to change this you have to change it in the source as well. This latter
|
|
||||||
file is also searched for by iodbc and is where
|
|
||||||
the DataSource definitions are placed. The format of both files is exactly
|
|
||||||
like that of a Windows INI file using key,value pairs. A DataSource definition
|
|
||||||
is started with a section name enclosed in square brackets i.e. [PostODBC].
|
|
||||||
Comments are started using a ';' character and are restricted to being
|
|
||||||
only on seperate lines(i.e. no comments are allowed on definition lines).
|
|
||||||
The important keywords for psqlodbc are:
|
|
||||||
Driver = (location where the psqlodbc library was installed)
|
|
||||||
ex. Driver = /usr/local/lib/libpspqlodbc.so
|
|
||||||
|
|
||||||
ServerName = hostname or ip-address of postgreSQL server
|
|
||||||
ex. ServerName = simpsons.springfield.com
|
|
||||||
or ServerName = 192.1.1.1
|
|
||||||
|
|
||||||
Database = name of database to connect to
|
|
||||||
ex. Database = template1
|
|
||||||
|
|
||||||
Port = tcp port that the postgreSQL server is listening on, note
|
|
||||||
that this need not be set as the driver defaults to the
|
|
||||||
default postgreSQL port of 5432. Of course if your server
|
|
||||||
is listening on a different port than you need to say
|
|
||||||
what it is here.
|
|
||||||
|
|
||||||
Username = name of authorized postgreSQL user
|
|
||||||
ex. Username = homer
|
|
||||||
|
|
||||||
Password = the password for the user named in Username. Note
|
|
||||||
that if you have password checking on in postgreSQL
|
|
||||||
you have to have this field. Unfortunately this means
|
|
||||||
storing clear text passwords in a file. If this bothers
|
|
||||||
you, well... write a dialog box routine and send it
|
|
||||||
to me.
|
|
||||||
ex. Password = Doh!
|
|
||||||
|
|
||||||
ReadOnly = 0 or 1. Default is 1 => database IS readonly. If
|
|
||||||
set to 0, database is read-write.
|
|
||||||
ex. ReadOnly = 0
|
|
||||||
|
|
||||||
Protocol = 6.2 to force the use of Postgres 6.2 protocol
|
|
||||||
|
|
||||||
The odbcinst.ini file is where sytem wide settings are kept. There are
|
|
||||||
quite a number of these, all of which have built-in defaults. Since I'm
|
|
||||||
not even sure what they are all for I won't try to describe them, check
|
|
||||||
the file dlg_specific.h for a list and some explanation. Two that I found
|
|
||||||
useful are Debug and CommLog, which can be used to tailor logging of messages
|
|
||||||
by the driver(note that you have to have defined MY_LOG and Q_LOG during
|
|
||||||
compilation of the driver, see the file misc.h for an explanation). If
|
|
||||||
you have logging On(ie. CommLog = 1 and/or Debug = 1) then logging will
|
|
||||||
occur to the files /tmp/mylog.log(Debug, only developers will be
|
|
||||||
interested) and /tmp/psqlodbc.log(end user log file).
|
|
||||||
|
|
||||||
USE:
|
|
||||||
run an ODBC enabled application :-) .
|
|
||||||
|
|
||||||
O.k. Well, the only ODBC compliant applications that I can
|
|
||||||
"guarantee" to work are those that are compiled using the following
|
|
||||||
headers that come with this driver, iodbc.h, isql.h and isqlext.h.
|
|
||||||
|
|
||||||
BUGS,etc.
|
|
||||||
|
|
||||||
If you have problems with compiling/installing or making this
|
|
||||||
package send e-mail to me at:
|
|
||||||
gerald.gryschuk@home.com or to the pgsql-interfaces mailing list
|
|
||||||
pgsql-interfaces@postgresql.org .
|
|
||||||
|
|
||||||
Ports to different Unices are greatly appreciated and can probably be
|
|
||||||
sent to me for now(although this may change shortly).
|
|
||||||
|
|
||||||
Bugs of a general nature should still be sent to the current
|
|
||||||
maintainer or to the interfaces list.
|
|
||||||
|
|
||||||
|
|
16
src/interfaces/odbc/TODO.txt
Normal file
16
src/interfaces/odbc/TODO.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
ODBC Driver TO-DO List
|
||||||
|
Last Updated: 9/16/98
|
||||||
|
|
||||||
|
|
||||||
|
Task Added Priority %Complete?
|
||||||
|
-----------------------------------------------------------------------------------
|
||||||
|
Implement 6.4 protocol changes 09/16/98 high
|
||||||
|
Handle multi-row rowsets (SQLBindCol) 09/16/98 med
|
||||||
|
Port to 16 bit? 04/20/98 med
|
||||||
|
Handle Literal precision in parsing 07/01/98 med
|
||||||
|
Cache SQLColumns at a higher level (henv or dll) 07/02/98 med
|
||||||
|
Add lo_text type to map to LONGVARCHAR 07/09/98 low
|
||||||
|
Add encrypted password capability 06/11/98 low
|
||||||
|
Remove tuplelist structure 06/25/98 low
|
||||||
|
Support SQLTables "%" semantics 07/01/98 low
|
@ -1,3 +1,5 @@
|
|||||||
VERSION = 0.24
|
VERSION = 0.25
|
||||||
EXTVER = .2
|
EXTVER = .0
|
||||||
|
|
||||||
|
SO_MAJOR_VERSION = 0
|
||||||
|
SO_MINOR_VERSION = 25
|
||||||
|
2
src/interfaces/odbc/acconfig.h
Normal file
2
src/interfaces/odbc/acconfig.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/* default path for the location of the odbcinst.ini file */
|
||||||
|
#undef ODBCINST
|
@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "bind.h"
|
#include "bind.h"
|
||||||
@ -25,7 +25,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -49,7 +49,9 @@ RETCODE SQL_API SQLBindParameter(
|
|||||||
SDWORD FAR *pcbValue)
|
SDWORD FAR *pcbValue)
|
||||||
{
|
{
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char *func="SQLBindParameter";
|
static char *func="SQLBindParameter";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if( ! stmt) {
|
if( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -131,8 +133,7 @@ char *func="SQLBindParameter";
|
|||||||
else
|
else
|
||||||
stmt->parameters[ipar].data_at_exec = FALSE;
|
stmt->parameters[ipar].data_at_exec = FALSE;
|
||||||
|
|
||||||
mylog("SQLBindParamater: ipar = %d, *pcbValue = %d, data_at_exec = %d\n",
|
mylog("SQLBindParamater: ipar = %d, *pcbValue = %d, data_at_exec = %d\n", ipar, pcbValue ? *pcbValue: -777, stmt->parameters[ipar].data_at_exec);
|
||||||
ipar, pcbValue ? *pcbValue: -777, stmt->parameters[ipar].data_at_exec);
|
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -149,8 +150,9 @@ RETCODE SQL_API SQLBindCol(
|
|||||||
SDWORD FAR *pcbValue)
|
SDWORD FAR *pcbValue)
|
||||||
{
|
{
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
Int2 numcols = 0;
|
static char *func="SQLBindCol";
|
||||||
char *func="SQLBindCol";
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
|
mylog("**** SQLBindCol: stmt = %u, icol = %d\n", stmt, icol);
|
||||||
|
|
||||||
@ -230,7 +232,9 @@ RETCODE SQL_API SQLDescribeParam(
|
|||||||
SWORD FAR *pfNullable)
|
SWORD FAR *pfNullable)
|
||||||
{
|
{
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char *func = "SQLDescribeParam";
|
static char *func = "SQLDescribeParam";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if( ! stmt) {
|
if( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -272,7 +276,9 @@ RETCODE SQL_API SQLParamOptions(
|
|||||||
UDWORD crow,
|
UDWORD crow,
|
||||||
UDWORD FAR *pirow)
|
UDWORD FAR *pirow)
|
||||||
{
|
{
|
||||||
char *func = "SQLParamOptions";
|
static char *func = "SQLParamOptions";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
|
SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
@ -294,7 +300,9 @@ RETCODE SQL_API SQLNumParams(
|
|||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char in_quote = FALSE;
|
char in_quote = FALSE;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
char *func = "SQLNumParams";
|
static char *func = "SQLNumParams";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if(!stmt) {
|
if(!stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -357,10 +365,11 @@ int i;
|
|||||||
void
|
void
|
||||||
extend_bindings(StatementClass *stmt, int num_columns)
|
extend_bindings(StatementClass *stmt, int num_columns)
|
||||||
{
|
{
|
||||||
|
static char *func="extend_bindings";
|
||||||
BindInfoClass *new_bindings;
|
BindInfoClass *new_bindings;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
mylog("in extend_bindings: stmt=%u, bindings_allocated=%d, num_columns=%d\n", stmt, stmt->bindings_allocated, num_columns);
|
mylog("%s: entering ... stmt=%u, bindings_allocated=%d, num_columns=%d\n", func, stmt, stmt->bindings_allocated, num_columns);
|
||||||
|
|
||||||
/* if we have too few, allocate room for more, and copy the old */
|
/* if we have too few, allocate room for more, and copy the old */
|
||||||
/* entries into the new structure */
|
/* entries into the new structure */
|
||||||
@ -368,6 +377,8 @@ mylog("in extend_bindings: stmt=%u, bindings_allocated=%d, num_columns=%d\n", st
|
|||||||
|
|
||||||
new_bindings = create_empty_bindings(num_columns);
|
new_bindings = create_empty_bindings(num_columns);
|
||||||
if ( ! new_bindings) {
|
if ( ! new_bindings) {
|
||||||
|
mylog("%s: unable to create %d new bindings from %d old bindings\n", func, num_columns, stmt->bindings_allocated);
|
||||||
|
|
||||||
if (stmt->bindings) {
|
if (stmt->bindings) {
|
||||||
free(stmt->bindings);
|
free(stmt->bindings);
|
||||||
stmt->bindings = NULL;
|
stmt->bindings = NULL;
|
||||||
|
@ -80,7 +80,7 @@ char new_field_name[MAX_MESSAGE_LEN+1];
|
|||||||
CI_set_field_info(self, lf, new_field_name, new_adtid, new_adtsize);
|
CI_set_field_info(self, lf, new_field_name, new_adtid, new_adtsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SOCK_get_errcode(sock) == 0;
|
return (SOCK_get_errcode(sock) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ struct ColumnInfoClass_ {
|
|||||||
#define CI_get_fieldsize(self, col) (self->adtsize[col])
|
#define CI_get_fieldsize(self, col) (self->adtsize[col])
|
||||||
#define CI_get_display_size(self, col) (self->display_size[col])
|
#define CI_get_display_size(self, col) (self->display_size[col])
|
||||||
|
|
||||||
ColumnInfoClass *CI_Constructor();
|
ColumnInfoClass *CI_Constructor(void);
|
||||||
void CI_Destructor(ColumnInfoClass *self);
|
void CI_Destructor(ColumnInfoClass *self);
|
||||||
void CI_free_memory(ColumnInfoClass *self);
|
void CI_free_memory(ColumnInfoClass *self);
|
||||||
char CI_read_fields(ColumnInfoClass *self, SocketClass *sock);
|
char CI_read_fields(ColumnInfoClass *self, SocketClass *sock);
|
||||||
|
694
src/interfaces/odbc/config.guess
vendored
Executable file
694
src/interfaces/odbc/config.guess
vendored
Executable file
@ -0,0 +1,694 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Attempt to guess a canonical system name.
|
||||||
|
# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Written by Per Bothner <bothner@cygnus.com>.
|
||||||
|
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||||
|
#
|
||||||
|
# This script attempts to guess a canonical system name similar to
|
||||||
|
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||||
|
# exits with 0. Otherwise, it exits with 1.
|
||||||
|
#
|
||||||
|
# The plan is that this can be called by configure scripts if you
|
||||||
|
# don't specify an explicit system type (host/target name).
|
||||||
|
#
|
||||||
|
# Only a few systems have been added to this list; please add others
|
||||||
|
# (but try to keep the structure clean).
|
||||||
|
#
|
||||||
|
|
||||||
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
|
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||||
|
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||||
|
PATH=$PATH:/.attbin ; export PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
||||||
|
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||||
|
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||||
|
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||||
|
|
||||||
|
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||||
|
|
||||||
|
# Note: order is significant - the case branches are not exclusive.
|
||||||
|
|
||||||
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
|
alpha:OSF1:*:*)
|
||||||
|
# A Vn.n version is a released version.
|
||||||
|
# A Tn.n version is a released field test version.
|
||||||
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
|
# 1.2 uses "1.2" for uname -r.
|
||||||
|
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
|
||||||
|
exit 0 ;;
|
||||||
|
21064:Windows_NT:50:3)
|
||||||
|
echo alpha-dec-winnt3.5
|
||||||
|
exit 0 ;;
|
||||||
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
|
echo m68k-cbm-sysv4
|
||||||
|
exit 0;;
|
||||||
|
amiga:NetBSD:*:*)
|
||||||
|
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
amiga:OpenBSD:*:*)
|
||||||
|
echo m68k-cbm-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
|
exit 0;;
|
||||||
|
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
|
||||||
|
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||||
|
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||||
|
echo pyramid-pyramid-sysv3
|
||||||
|
else
|
||||||
|
echo pyramid-pyramid-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
NILE:*:*:dcosx)
|
||||||
|
echo pyramid-pyramid-svr4
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||||
|
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
i86pc:SunOS:5.*:*)
|
||||||
|
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:6*:*)
|
||||||
|
# According to config.sub, this is the proper way to canonicalize
|
||||||
|
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
||||||
|
# it's likely to be more like Solaris than SunOS4.
|
||||||
|
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:*:*)
|
||||||
|
case "`/usr/bin/arch -k`" in
|
||||||
|
Series*|S4*)
|
||||||
|
UNAME_RELEASE=`uname -v`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||||
|
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:SunOS:*:*)
|
||||||
|
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
aushp:SunOS:*:*)
|
||||||
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:NetBSD:*:*)
|
||||||
|
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:OpenBSD:*:*)
|
||||||
|
echo m68k-atari-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:NetBSD:*:*)
|
||||||
|
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:OpenBSD:*:*)
|
||||||
|
echo m68k-sun-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:NetBSD:*:*)
|
||||||
|
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:OpenBSD:*:*)
|
||||||
|
echo m68k-apple-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
powerpc:machten:*:*)
|
||||||
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
RISC*:Mach:*:*)
|
||||||
|
echo mips-dec-mach_bsd4.3
|
||||||
|
exit 0 ;;
|
||||||
|
RISC*:ULTRIX:*:*)
|
||||||
|
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
VAX*:ULTRIX*:*:*)
|
||||||
|
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
int main (argc, argv) int argc; char **argv; {
|
||||||
|
#if defined (host_mips) && defined (MIPSEB)
|
||||||
|
#if defined (SYSTYPE_SYSV)
|
||||||
|
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (SYSTYPE_SVR4)
|
||||||
|
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
|
||||||
|
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
exit (-1);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy \
|
||||||
|
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
|
&& rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
|
echo powerpc-harris-powerunix
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:CX/UX:7*:*)
|
||||||
|
echo m88k-harris-cxux7
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:*:4*:R4*)
|
||||||
|
echo m88k-motorola-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:*:3*:R3*)
|
||||||
|
echo m88k-motorola-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
AViiON:dgux:*:*)
|
||||||
|
# DG/UX returns AViiON for all architectures
|
||||||
|
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||||
|
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||||
|
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||||
|
-o ${TARGET_BINARY_INTERFACE}x = m88kdguxx \
|
||||||
|
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||||
|
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||||
|
echo m88k-dolphin-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
M88*:*:R3*:*)
|
||||||
|
# Delta 88k system running SVR3
|
||||||
|
echo m88k-motorola-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
||||||
|
echo m88k-tektronix-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||||
|
echo m68k-tektronix-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
*:IRIX*:*:*)
|
||||||
|
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||||
|
exit 0 ;;
|
||||||
|
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||||
|
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||||
|
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||||
|
i?86:AIX:*:*)
|
||||||
|
echo i386-ibm-aix
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:2:3)
|
||||||
|
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
#include <sys/systemcfg.h>
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
if (!__power_pc())
|
||||||
|
exit(1);
|
||||||
|
puts("powerpc-ibm-aix3.2.5");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo rs6000-ibm-aix3.2.5
|
||||||
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
|
echo rs6000-ibm-aix3.2.4
|
||||||
|
else
|
||||||
|
echo rs6000-ibm-aix3.2
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:*:4)
|
||||||
|
if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
|
||||||
|
IBM_ARCH=rs6000
|
||||||
|
else
|
||||||
|
IBM_ARCH=powerpc
|
||||||
|
fi
|
||||||
|
if [ -x /usr/bin/oslevel ] ; then
|
||||||
|
IBM_REV=`/usr/bin/oslevel`
|
||||||
|
else
|
||||||
|
IBM_REV=4.${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:*:*)
|
||||||
|
echo rs6000-ibm-aix
|
||||||
|
exit 0 ;;
|
||||||
|
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||||
|
echo romp-ibm-bsd4.4
|
||||||
|
exit 0 ;;
|
||||||
|
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||||
|
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||||
|
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||||
|
*:BOSX:*:*)
|
||||||
|
echo rs6000-bull-bosx
|
||||||
|
exit 0 ;;
|
||||||
|
DPX/2?00:B.O.S.:*:*)
|
||||||
|
echo m68k-bull-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
9000/[34]??:4.3bsd:1.*:*)
|
||||||
|
echo m68k-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
||||||
|
echo m68k-hp-bsd4.4
|
||||||
|
exit 0 ;;
|
||||||
|
9000/[3478]??:HP-UX:*:*)
|
||||||
|
case "${UNAME_MACHINE}" in
|
||||||
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
|
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
|
||||||
|
9000/8?? ) HP_ARCH=hppa1.0 ;;
|
||||||
|
esac
|
||||||
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
|
exit 0 ;;
|
||||||
|
3050*:HI-UX:*:*)
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
#include <unistd.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
long cpu = sysconf (_SC_CPU_VERSION);
|
||||||
|
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
||||||
|
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
||||||
|
results, however. */
|
||||||
|
if (CPU_IS_PA_RISC (cpu))
|
||||||
|
{
|
||||||
|
switch (cpu)
|
||||||
|
{
|
||||||
|
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
||||||
|
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
||||||
|
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
||||||
|
default: puts ("hppa-hitachi-hiuxwe2"); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (CPU_IS_HP_MC68K (cpu))
|
||||||
|
puts ("m68k-hitachi-hiuxwe2");
|
||||||
|
else puts ("unknown-hitachi-hiuxwe2");
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo unknown-hitachi-hiuxwe2
|
||||||
|
exit 0 ;;
|
||||||
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
|
echo hppa1.1-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
9000/8??:4.3bsd:*:*)
|
||||||
|
echo hppa1.0-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||||
|
echo hppa1.1-hp-osf
|
||||||
|
exit 0 ;;
|
||||||
|
hp8??:OSF1:*:*)
|
||||||
|
echo hppa1.0-hp-osf
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:OSF1:*:*)
|
||||||
|
if [ -x /usr/sbin/sysversion ] ; then
|
||||||
|
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-unknown-osf1
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
parisc*:Lites*:*:*)
|
||||||
|
echo hppa1.1-hp-lites
|
||||||
|
exit 0 ;;
|
||||||
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
|
echo c1-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
||||||
|
if getsysinfo -f scalar_acc
|
||||||
|
then echo c32-convex-bsd
|
||||||
|
else echo c2-convex-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
||||||
|
echo c34-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
||||||
|
echo c38-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||||
|
echo c4-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*X-MP:*:*:*)
|
||||||
|
echo xmp-cray-unicos
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*Y-MP:*:*:*)
|
||||||
|
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*[A-Z]90:*:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||||
|
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||||
|
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*TS:*:*:*)
|
||||||
|
echo t90-cray-unicos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY-2:*:*:*)
|
||||||
|
echo cray2-cray-unicos
|
||||||
|
exit 0 ;;
|
||||||
|
F300:UNIX_System_V:*:*)
|
||||||
|
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
||||||
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
|
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
|
exit 0 ;;
|
||||||
|
F301:UNIX_System_V:*:*)
|
||||||
|
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
hp3[0-9][05]:NetBSD:*:*)
|
||||||
|
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hp3[0-9][05]:OpenBSD:*:*)
|
||||||
|
echo m68k-hp-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:FreeBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:NetBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:OpenBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
exit 0 ;;
|
||||||
|
i*:CYGWIN*:*)
|
||||||
|
echo i386-pc-cygwin32
|
||||||
|
exit 0 ;;
|
||||||
|
p*:CYGWIN*:*)
|
||||||
|
echo powerpcle-unknown-cygwin32
|
||||||
|
exit 0 ;;
|
||||||
|
prep*:SunOS:5.*:*)
|
||||||
|
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:GNU:*:*)
|
||||||
|
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:Linux:*:*)
|
||||||
|
# The BFD linker knows what the default object file format is, so
|
||||||
|
# first see if it will tell us.
|
||||||
|
ld_help_string=`ld --help 2>&1`
|
||||||
|
if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
|
||||||
|
echo "powerpc-unknown-linux-gnu" ; exit 0
|
||||||
|
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||||
|
echo alpha-unknown-linux-gnu ; exit 0
|
||||||
|
elif test "${UNAME_MACHINE}" = "sparc" ; then
|
||||||
|
echo sparc-unknown-linux-gnu ; exit 0
|
||||||
|
else
|
||||||
|
# Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
|
||||||
|
# useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
|
||||||
|
test ! -d /usr/lib/ldscripts/. \
|
||||||
|
&& echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
|
||||||
|
# Determine whether the default compiler is a.out or elf
|
||||||
|
cat >dummy.c <<EOF
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
#ifdef __ELF__
|
||||||
|
printf ("%s-pc-linux-gnu\n", argv[1]);
|
||||||
|
#else
|
||||||
|
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
fi ;;
|
||||||
|
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||||
|
# are messed up and put the nodename in both sysname and nodename.
|
||||||
|
i?86:DYNIX/ptx:4*:*)
|
||||||
|
echo i386-sequent-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||||
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
|
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:*:3.2:*)
|
||||||
|
if test -f /usr/options/cb.name; then
|
||||||
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
|
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||||
|
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||||
|
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||||
|
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i586
|
||||||
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
Intel:Mach:3*:*)
|
||||||
|
echo i386-pc-mach3
|
||||||
|
exit 0 ;;
|
||||||
|
paragon:*:*:*)
|
||||||
|
echo i860-intel-osf1
|
||||||
|
exit 0 ;;
|
||||||
|
i860:*:4.*:*) # i860-SVR4
|
||||||
|
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
||||||
|
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
||||||
|
else # Add other i860-SVR4 vendors below as they are discovered.
|
||||||
|
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
mini*:CTIX:SYS*5:*)
|
||||||
|
# "miniframe"
|
||||||
|
echo m68010-convergent-sysv
|
||||||
|
exit 0 ;;
|
||||||
|
M68*:*:R3V[567]*:*)
|
||||||
|
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||||
|
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||||
|
OS_REL=''
|
||||||
|
test -r /etc/.relid \
|
||||||
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
|
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
|
||||||
|
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||||
|
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
|
||||||
|
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||||
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
|
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||||
|
m68*:LynxOS:2.*:*)
|
||||||
|
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mc68030:UNIX_System_V:4.*:*)
|
||||||
|
echo m68k-atari-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:LynxOS:2.*:*)
|
||||||
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
|
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||||
|
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
SM[BE]S:UNIX_SV:*:*)
|
||||||
|
echo mips-dde-sysv${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
RM*:SINIX-*:*:*)
|
||||||
|
echo mips-sni-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
*:SINIX-*:*:*)
|
||||||
|
if uname -p 2>/dev/null >/dev/null ; then
|
||||||
|
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||||
|
echo ${UNAME_MACHINE}-sni-sysv4
|
||||||
|
else
|
||||||
|
echo ns32k-sni-sysv
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
*:UNIX_System_V:4*:FTX*)
|
||||||
|
# From Gerald Hewes <hewes@openmarket.com>.
|
||||||
|
# How about differentiating between stratus architectures? -djm
|
||||||
|
echo hppa1.1-stratus-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
*:*:*:FTX*)
|
||||||
|
# From seanf@swdc.stratus.com.
|
||||||
|
echo i860-stratus-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
mc68*:A/UX:*:*)
|
||||||
|
echo m68k-apple-aux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
|
||||||
|
if [ -d /usr/nec ]; then
|
||||||
|
echo mips-nec-sysv${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||||
|
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||||
|
echo i586-unisys-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
|
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||||
|
|
||||||
|
cat >dummy.c <<EOF
|
||||||
|
#ifdef _SEQUENT_
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/utsname.h>
|
||||||
|
#endif
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
#if defined (sony)
|
||||||
|
#if defined (MIPSEB)
|
||||||
|
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||||
|
I don't know.... */
|
||||||
|
printf ("mips-sony-bsd\n"); exit (0);
|
||||||
|
#else
|
||||||
|
#include <sys/param.h>
|
||||||
|
printf ("m68k-sony-newsos%s\n",
|
||||||
|
#ifdef NEWSOS4
|
||||||
|
"4"
|
||||||
|
#else
|
||||||
|
""
|
||||||
|
#endif
|
||||||
|
); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||||
|
printf ("arm-acorn-riscix"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (hp300) && !defined (hpux)
|
||||||
|
printf ("m68k-hp-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (NeXT)
|
||||||
|
#if !defined (__ARCHITECTURE__)
|
||||||
|
#define __ARCHITECTURE__ "m68k"
|
||||||
|
#endif
|
||||||
|
int version;
|
||||||
|
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||||
|
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||||
|
exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (MULTIMAX) || defined (n16)
|
||||||
|
#if defined (UMAXV)
|
||||||
|
printf ("ns32k-encore-sysv\n"); exit (0);
|
||||||
|
#else
|
||||||
|
#if defined (CMU)
|
||||||
|
printf ("ns32k-encore-mach\n"); exit (0);
|
||||||
|
#else
|
||||||
|
printf ("ns32k-encore-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__386BSD__)
|
||||||
|
printf ("i386-pc-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (sequent)
|
||||||
|
#if defined (i386)
|
||||||
|
printf ("i386-sequent-dynix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (ns32000)
|
||||||
|
printf ("ns32k-sequent-dynix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (_SEQUENT_)
|
||||||
|
struct utsname un;
|
||||||
|
|
||||||
|
uname(&un);
|
||||||
|
|
||||||
|
if (strncmp(un.version, "V2", 2) == 0) {
|
||||||
|
printf ("i386-sequent-ptx2\n"); exit (0);
|
||||||
|
}
|
||||||
|
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
||||||
|
printf ("i386-sequent-ptx1\n"); exit (0);
|
||||||
|
}
|
||||||
|
printf ("i386-sequent-ptx\n"); exit (0);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (vax)
|
||||||
|
#if !defined (ultrix)
|
||||||
|
printf ("vax-dec-bsd\n"); exit (0);
|
||||||
|
#else
|
||||||
|
printf ("vax-dec-ultrix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (alliant) && defined (i860)
|
||||||
|
printf ("i860-alliant-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
|
||||||
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
|
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
|
||||||
|
|
||||||
|
# Convex versions that predate uname can use getsysinfo(1)
|
||||||
|
|
||||||
|
if [ -x /usr/convex/getsysinfo ]
|
||||||
|
then
|
||||||
|
case `getsysinfo -f cpu_type` in
|
||||||
|
c1*)
|
||||||
|
echo c1-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c2*)
|
||||||
|
if getsysinfo -f scalar_acc
|
||||||
|
then echo c32-convex-bsd
|
||||||
|
else echo c2-convex-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
c34*)
|
||||||
|
echo c34-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c38*)
|
||||||
|
echo c38-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c4*)
|
||||||
|
echo c4-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo '(Unable to guess system type)' 1>&2
|
||||||
|
|
||||||
|
exit 1
|
25
src/interfaces/odbc/config.h.in
Normal file
25
src/interfaces/odbc/config.h.in
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||||
|
|
||||||
|
/* Define if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* default path for the location of the odbcinst.ini file */
|
||||||
|
#undef ODBCINST
|
||||||
|
|
||||||
|
/* Define if you have the stricmp function. */
|
||||||
|
#undef HAVE_STRICMP
|
||||||
|
|
||||||
|
/* Define if you have the <pwd.h> header file. */
|
||||||
|
#undef HAVE_PWD_H
|
||||||
|
|
||||||
|
/* Define if you have the <sys/param.h> header file. */
|
||||||
|
#undef HAVE_SYS_PARAM_H
|
||||||
|
|
||||||
|
/* Define if you have the c library (-lc). */
|
||||||
|
#undef HAVE_LIBC
|
||||||
|
|
||||||
|
/* Define if you have the dl library (-ldl). */
|
||||||
|
#undef HAVE_LIBDL
|
||||||
|
|
||||||
|
/* Define if you have the m library (-lm). */
|
||||||
|
#undef HAVE_LIBM
|
261
src/interfaces/odbc/config.status
Normal file
261
src/interfaces/odbc/config.status
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Generated automatically by configure.
|
||||||
|
# Run this file to recreate the current configuration.
|
||||||
|
# This directory was configured as follows,
|
||||||
|
# on host golem:
|
||||||
|
#
|
||||||
|
# ./configure
|
||||||
|
#
|
||||||
|
# Compiler output produced by configure, useful for debugging
|
||||||
|
# configure, is in ./config.log if it exists.
|
||||||
|
|
||||||
|
ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
|
||||||
|
for ac_option
|
||||||
|
do
|
||||||
|
case "$ac_option" in
|
||||||
|
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||||
|
echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion"
|
||||||
|
exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;;
|
||||||
|
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
|
||||||
|
echo "./config.status generated by autoconf version 2.12"
|
||||||
|
exit 0 ;;
|
||||||
|
-help | --help | --hel | --he | --h)
|
||||||
|
echo "$ac_cs_usage"; exit 0 ;;
|
||||||
|
*) echo "$ac_cs_usage"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
ac_given_srcdir=.
|
||||||
|
|
||||||
|
trap 'rm -fr GNUmakefile Makefile.global config.h conftest*; exit 1' 1 2 15
|
||||||
|
|
||||||
|
# Protect against being on the right side of a sed subst in config.status.
|
||||||
|
sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
|
||||||
|
s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
|
||||||
|
/^[ ]*VPATH[ ]*=[^:]*$/d
|
||||||
|
|
||||||
|
s%@CFLAGS@%-O2%g
|
||||||
|
s%@CPPFLAGS@%%g
|
||||||
|
s%@CXXFLAGS@%%g
|
||||||
|
s%@DEFS@%-DHAVE_CONFIG_H%g
|
||||||
|
s%@LDFLAGS@%%g
|
||||||
|
s%@LIBS@%-ldl -lm -lc %g
|
||||||
|
s%@exec_prefix@%${prefix}%g
|
||||||
|
s%@prefix@%/usr/local/pgsql%g
|
||||||
|
s%@program_transform_name@%s,x,x,%g
|
||||||
|
s%@bindir@%${exec_prefix}/bin%g
|
||||||
|
s%@sbindir@%${exec_prefix}/sbin%g
|
||||||
|
s%@libexecdir@%${exec_prefix}/libexec%g
|
||||||
|
s%@datadir@%${prefix}/share%g
|
||||||
|
s%@sysconfdir@%${prefix}/etc%g
|
||||||
|
s%@sharedstatedir@%${prefix}/com%g
|
||||||
|
s%@localstatedir@%${prefix}/var%g
|
||||||
|
s%@libdir@%${exec_prefix}/lib%g
|
||||||
|
s%@includedir@%${prefix}/include%g
|
||||||
|
s%@oldincludedir@%/usr/include%g
|
||||||
|
s%@infodir@%${prefix}/info%g
|
||||||
|
s%@mandir@%${prefix}/man%g
|
||||||
|
s%@host@%i686-pc-linux-gnu%g
|
||||||
|
s%@host_alias@%i686-pc-linux-gnu%g
|
||||||
|
s%@host_cpu@%i686%g
|
||||||
|
s%@host_vendor@%pc%g
|
||||||
|
s%@host_os@%linux-gnu%g
|
||||||
|
s%@PORTNAME@%linux%g
|
||||||
|
s%@ODBCINSTDIR@%%g
|
||||||
|
s%@CC@%gcc%g
|
||||||
|
s%@CPP@%gcc -E%g
|
||||||
|
s%@AROPT@%crs%g
|
||||||
|
s%@SHARED_LIB@%-fpic%g
|
||||||
|
s%@DLSUFFIX@%.so%g
|
||||||
|
s%@DL_LIB@%%g
|
||||||
|
s%@INSTALL@%/usr/bin/install%g
|
||||||
|
s%@INSTLOPTS@%-c -m 444%g
|
||||||
|
s%@INSTL_LIB_OPTS@%-c -m 644%g
|
||||||
|
s%@INSTL_EXE_OPTS@%-c -m 555%g
|
||||||
|
s%@DASH_N@%-n%g
|
||||||
|
s%@BACKSLASH_C@%%g
|
||||||
|
s%@LN_S@%ln -s%g
|
||||||
|
s%@SET_MAKE@%%g
|
||||||
|
s%@RANLIB@%ranlib%g
|
||||||
|
s%@find@%/usr/bin/find%g
|
||||||
|
s%@tar@%/bin/tar%g
|
||||||
|
s%@split@%/usr/bin/split%g
|
||||||
|
|
||||||
|
CEOF
|
||||||
|
|
||||||
|
# Split the substitutions into bite-sized pieces for seds with
|
||||||
|
# small command number limits, like on Digital OSF/1 and HP-UX.
|
||||||
|
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
|
||||||
|
ac_file=1 # Number of current file.
|
||||||
|
ac_beg=1 # First line for current file.
|
||||||
|
ac_end=$ac_max_sed_cmds # Line after last line for current file.
|
||||||
|
ac_more_lines=:
|
||||||
|
ac_sed_cmds=""
|
||||||
|
while $ac_more_lines; do
|
||||||
|
if test $ac_beg -gt 1; then
|
||||||
|
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||||
|
else
|
||||||
|
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||||
|
fi
|
||||||
|
if test ! -s conftest.s$ac_file; then
|
||||||
|
ac_more_lines=false
|
||||||
|
rm -f conftest.s$ac_file
|
||||||
|
else
|
||||||
|
if test -z "$ac_sed_cmds"; then
|
||||||
|
ac_sed_cmds="sed -f conftest.s$ac_file"
|
||||||
|
else
|
||||||
|
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
|
||||||
|
fi
|
||||||
|
ac_file=`expr $ac_file + 1`
|
||||||
|
ac_beg=$ac_end
|
||||||
|
ac_end=`expr $ac_end + $ac_max_sed_cmds`
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test -z "$ac_sed_cmds"; then
|
||||||
|
ac_sed_cmds=cat
|
||||||
|
fi
|
||||||
|
|
||||||
|
CONFIG_FILES=${CONFIG_FILES-"GNUmakefile Makefile.global"}
|
||||||
|
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
|
||||||
|
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||||
|
case "$ac_file" in
|
||||||
|
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
|
||||||
|
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||||
|
*) ac_file_in="${ac_file}.in" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
|
||||||
|
|
||||||
|
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||||
|
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||||
|
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||||
|
# The file is in a subdirectory.
|
||||||
|
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||||
|
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
|
||||||
|
# A "../" for each directory in $ac_dir_suffix.
|
||||||
|
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
|
||||||
|
else
|
||||||
|
ac_dir_suffix= ac_dots=
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$ac_given_srcdir" in
|
||||||
|
.) srcdir=.
|
||||||
|
if test -z "$ac_dots"; then top_srcdir=.
|
||||||
|
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
|
||||||
|
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
|
||||||
|
*) # Relative path.
|
||||||
|
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
|
||||||
|
top_srcdir="$ac_dots$ac_given_srcdir" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
echo creating "$ac_file"
|
||||||
|
rm -f "$ac_file"
|
||||||
|
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
|
||||||
|
case "$ac_file" in
|
||||||
|
*Makefile*) ac_comsub="1i\\
|
||||||
|
# $configure_input" ;;
|
||||||
|
*) ac_comsub= ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
|
||||||
|
sed -e "$ac_comsub
|
||||||
|
s%@configure_input@%$configure_input%g
|
||||||
|
s%@srcdir@%$srcdir%g
|
||||||
|
s%@top_srcdir@%$top_srcdir%g
|
||||||
|
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
|
||||||
|
fi; done
|
||||||
|
rm -f conftest.s*
|
||||||
|
|
||||||
|
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
|
||||||
|
# NAME is the cpp macro being defined and VALUE is the value it is being given.
|
||||||
|
#
|
||||||
|
# ac_d sets the value in "#define NAME VALUE" lines.
|
||||||
|
ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
|
||||||
|
ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
|
||||||
|
ac_dC='\3'
|
||||||
|
ac_dD='%g'
|
||||||
|
# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
|
||||||
|
ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||||
|
ac_uB='\([ ]\)%\1#\2define\3'
|
||||||
|
ac_uC=' '
|
||||||
|
ac_uD='\4%g'
|
||||||
|
# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
|
||||||
|
ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||||
|
ac_eB='$%\1#\2define\3'
|
||||||
|
ac_eC=' '
|
||||||
|
ac_eD='%g'
|
||||||
|
|
||||||
|
if test "${CONFIG_HEADERS+set}" != set; then
|
||||||
|
CONFIG_HEADERS="config.h"
|
||||||
|
fi
|
||||||
|
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
|
||||||
|
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||||
|
case "$ac_file" in
|
||||||
|
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
|
||||||
|
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||||
|
*) ac_file_in="${ac_file}.in" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo creating $ac_file
|
||||||
|
|
||||||
|
rm -f conftest.frag conftest.in conftest.out
|
||||||
|
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
|
||||||
|
cat $ac_file_inputs > conftest.in
|
||||||
|
|
||||||
|
cat > conftest.frag <<CEOF
|
||||||
|
${ac_dA}ODBCINST${ac_dB}ODBCINST${ac_dC}${ac_dD}
|
||||||
|
${ac_uA}ODBCINST${ac_uB}ODBCINST${ac_uC}${ac_uD}
|
||||||
|
${ac_eA}ODBCINST${ac_eB}ODBCINST${ac_eC}${ac_eD}
|
||||||
|
${ac_dA}HAVE_LIBC${ac_dB}HAVE_LIBC${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}HAVE_LIBC${ac_uB}HAVE_LIBC${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}HAVE_LIBC${ac_eB}HAVE_LIBC${ac_eC}1${ac_eD}
|
||||||
|
${ac_dA}HAVE_LIBM${ac_dB}HAVE_LIBM${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}HAVE_LIBM${ac_uB}HAVE_LIBM${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}HAVE_LIBM${ac_eB}HAVE_LIBM${ac_eC}1${ac_eD}
|
||||||
|
${ac_dA}HAVE_LIBDL${ac_dB}HAVE_LIBDL${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}HAVE_LIBDL${ac_uB}HAVE_LIBDL${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}HAVE_LIBDL${ac_eB}HAVE_LIBDL${ac_eC}1${ac_eD}
|
||||||
|
CEOF
|
||||||
|
sed -f conftest.frag conftest.in > conftest.out
|
||||||
|
rm -f conftest.in
|
||||||
|
mv conftest.out conftest.in
|
||||||
|
|
||||||
|
cat > conftest.frag <<CEOF
|
||||||
|
${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
|
||||||
|
${ac_dA}HAVE_SYS_PARAM_H${ac_dB}HAVE_SYS_PARAM_H${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}HAVE_SYS_PARAM_H${ac_uB}HAVE_SYS_PARAM_H${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}HAVE_SYS_PARAM_H${ac_eB}HAVE_SYS_PARAM_H${ac_eC}1${ac_eD}
|
||||||
|
${ac_dA}HAVE_PWD_H${ac_dB}HAVE_PWD_H${ac_dC}1${ac_dD}
|
||||||
|
${ac_uA}HAVE_PWD_H${ac_uB}HAVE_PWD_H${ac_uC}1${ac_uD}
|
||||||
|
${ac_eA}HAVE_PWD_H${ac_eB}HAVE_PWD_H${ac_eC}1${ac_eD}
|
||||||
|
s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
|
||||||
|
CEOF
|
||||||
|
sed -f conftest.frag conftest.in > conftest.out
|
||||||
|
rm -f conftest.in
|
||||||
|
mv conftest.out conftest.in
|
||||||
|
|
||||||
|
rm -f conftest.frag conftest.h
|
||||||
|
echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
|
||||||
|
cat conftest.in >> conftest.h
|
||||||
|
rm -f conftest.in
|
||||||
|
if cmp -s $ac_file conftest.h 2>/dev/null; then
|
||||||
|
echo "$ac_file is unchanged"
|
||||||
|
rm -f conftest.h
|
||||||
|
else
|
||||||
|
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||||
|
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||||
|
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||||
|
# The file is in a subdirectory.
|
||||||
|
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||||
|
fi
|
||||||
|
rm -f $ac_file
|
||||||
|
mv conftest.h $ac_file
|
||||||
|
fi
|
||||||
|
fi; done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
930
src/interfaces/odbc/config.sub
vendored
Executable file
930
src/interfaces/odbc/config.sub
vendored
Executable file
@ -0,0 +1,930 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Configuration validation subroutine script, version 1.1.
|
||||||
|
# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
|
# This file is (in principle) common to ALL GNU software.
|
||||||
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
|
# can handle that machine. It does not imply ALL GNU software can.
|
||||||
|
#
|
||||||
|
# This file is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
|
# Supply the specified configuration type as an argument.
|
||||||
|
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||||
|
# Otherwise, we print the canonical config type on stdout and succeed.
|
||||||
|
|
||||||
|
# This file is supposed to be the same for all GNU packages
|
||||||
|
# and recognize all the CPU types, system types and aliases
|
||||||
|
# that are meaningful with *any* GNU software.
|
||||||
|
# Each package is responsible for reporting which valid configurations
|
||||||
|
# it does not support. The user should be able to distinguish
|
||||||
|
# a failure to support a valid configuration from a meaningless
|
||||||
|
# configuration.
|
||||||
|
|
||||||
|
# The goal of this file is to map all the various variations of a given
|
||||||
|
# machine specification into a single specification in the form:
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or in some cases, the newer four-part form:
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# It is wrong to echo any other type of specification.
|
||||||
|
|
||||||
|
if [ x$1 = x ]
|
||||||
|
then
|
||||||
|
echo Configuration name missing. 1>&2
|
||||||
|
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||||
|
echo "or $0 ALIAS" 1>&2
|
||||||
|
echo where ALIAS is a recognized configuration type. 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# First pass through any local machine types.
|
||||||
|
case $1 in
|
||||||
|
*local*)
|
||||||
|
echo $1
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
||||||
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
linux-gnu*)
|
||||||
|
os=-$maybe_os
|
||||||
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||||
|
if [ $basic_machine != $1 ]
|
||||||
|
then os=`echo $1 | sed 's/.*-/-/'`
|
||||||
|
else os=; fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
### Let's recognize common machines as not being operating systems so
|
||||||
|
### that things like config.sub decstation-3100 work. We also
|
||||||
|
### recognize some manufacturers as not being operating systems, so we
|
||||||
|
### can provide default operating systems below.
|
||||||
|
case $os in
|
||||||
|
-sun*os*)
|
||||||
|
# Prevent following clause from handling this invalid input.
|
||||||
|
;;
|
||||||
|
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
||||||
|
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
||||||
|
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
||||||
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
|
-apple)
|
||||||
|
os=
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
|
-hiux*)
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
-sco5)
|
||||||
|
os=sco3.2v5
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco4)
|
||||||
|
os=-sco3.2v4
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco3.2.[4-9]*)
|
||||||
|
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco3.2v[4-9]*)
|
||||||
|
# Don't forget version if it is 3.2v4 or newer.
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco*)
|
||||||
|
os=-sco3.2v2
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-isc)
|
||||||
|
os=-isc2.2
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-clix*)
|
||||||
|
basic_machine=clipper-intergraph
|
||||||
|
;;
|
||||||
|
-isc*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-lynx*)
|
||||||
|
os=-lynxos
|
||||||
|
;;
|
||||||
|
-ptx*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
||||||
|
;;
|
||||||
|
-windowsnt*)
|
||||||
|
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||||
|
;;
|
||||||
|
-psos*)
|
||||||
|
os=-psos
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Decode aliases for certain CPU-COMPANY combinations.
|
||||||
|
case $basic_machine in
|
||||||
|
# Recognize the basic CPU types without company name.
|
||||||
|
# Some are omitted here because they have special meanings below.
|
||||||
|
tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||||
|
| arme[lb] | pyramid \
|
||||||
|
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
|
||||||
|
| alpha | we32k | ns16k | clipper | i370 | sh \
|
||||||
|
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
|
||||||
|
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||||
|
| sparc | sparclet | sparclite | sparc64)
|
||||||
|
basic_machine=$basic_machine-unknown
|
||||||
|
;;
|
||||||
|
# We use `pc' rather than `unknown'
|
||||||
|
# because (1) that's what they normally are, and
|
||||||
|
# (2) the word "unknown" tends to confuse beginning users.
|
||||||
|
i[3456]86)
|
||||||
|
basic_machine=$basic_machine-pc
|
||||||
|
;;
|
||||||
|
# Object if more than one company name word.
|
||||||
|
*-*-*)
|
||||||
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
# Recognize the basic CPU types with company name.
|
||||||
|
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
||||||
|
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
||||||
|
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
||||||
|
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
||||||
|
| hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
|
||||||
|
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
||||||
|
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
||||||
|
| mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
|
||||||
|
;;
|
||||||
|
# Recognize the various machine names and aliases which stand
|
||||||
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
|
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||||
|
basic_machine=m68000-att
|
||||||
|
;;
|
||||||
|
3b*)
|
||||||
|
basic_machine=we32k-att
|
||||||
|
;;
|
||||||
|
alliant | fx80)
|
||||||
|
basic_machine=fx80-alliant
|
||||||
|
;;
|
||||||
|
altos | altos3068)
|
||||||
|
basic_machine=m68k-altos
|
||||||
|
;;
|
||||||
|
am29k)
|
||||||
|
basic_machine=a29k-none
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
amdahl)
|
||||||
|
basic_machine=580-amdahl
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
amiga | amiga-*)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
;;
|
||||||
|
amigados)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
os=-amigados
|
||||||
|
;;
|
||||||
|
amigaunix | amix)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
apollo68)
|
||||||
|
basic_machine=m68k-apollo
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
aux)
|
||||||
|
basic_machine=m68k-apple
|
||||||
|
os=-aux
|
||||||
|
;;
|
||||||
|
balance)
|
||||||
|
basic_machine=ns32k-sequent
|
||||||
|
os=-dynix
|
||||||
|
;;
|
||||||
|
convex-c1)
|
||||||
|
basic_machine=c1-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c2)
|
||||||
|
basic_machine=c2-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c32)
|
||||||
|
basic_machine=c32-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c34)
|
||||||
|
basic_machine=c34-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c38)
|
||||||
|
basic_machine=c38-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
cray | ymp)
|
||||||
|
basic_machine=ymp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
cray2)
|
||||||
|
basic_machine=cray2-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
[ctj]90-cray)
|
||||||
|
basic_machine=c90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
crds | unos)
|
||||||
|
basic_machine=m68k-crds
|
||||||
|
;;
|
||||||
|
da30 | da30-*)
|
||||||
|
basic_machine=m68k-da30
|
||||||
|
;;
|
||||||
|
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||||
|
basic_machine=mips-dec
|
||||||
|
;;
|
||||||
|
delta | 3300 | motorola-3300 | motorola-delta \
|
||||||
|
| 3300-motorola | delta-motorola)
|
||||||
|
basic_machine=m68k-motorola
|
||||||
|
;;
|
||||||
|
delta88)
|
||||||
|
basic_machine=m88k-motorola
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
dpx20 | dpx20-*)
|
||||||
|
basic_machine=rs6000-bull
|
||||||
|
os=-bosx
|
||||||
|
;;
|
||||||
|
dpx2* | dpx2*-bull)
|
||||||
|
basic_machine=m68k-bull
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
ebmon29k)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-ebmon
|
||||||
|
;;
|
||||||
|
elxsi)
|
||||||
|
basic_machine=elxsi-elxsi
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
encore | umax | mmax)
|
||||||
|
basic_machine=ns32k-encore
|
||||||
|
;;
|
||||||
|
fx2800)
|
||||||
|
basic_machine=i860-alliant
|
||||||
|
;;
|
||||||
|
genix)
|
||||||
|
basic_machine=ns32k-ns
|
||||||
|
;;
|
||||||
|
gmicro)
|
||||||
|
basic_machine=tron-gmicro
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
h3050r* | hiux*)
|
||||||
|
basic_machine=hppa1.1-hitachi
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
h8300hms)
|
||||||
|
basic_machine=h8300-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
|
harris)
|
||||||
|
basic_machine=m88k-harris
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
hp300-*)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
;;
|
||||||
|
hp300bsd)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
hp300hpux)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
os=-hpux
|
||||||
|
;;
|
||||||
|
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||||
|
basic_machine=m68000-hp
|
||||||
|
;;
|
||||||
|
hp9k3[2-9][0-9])
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
;;
|
||||||
|
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
|
hppa-next)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
i370-ibm* | ibm*)
|
||||||
|
basic_machine=i370-ibm
|
||||||
|
os=-mvs
|
||||||
|
;;
|
||||||
|
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||||
|
i[3456]86v32)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv32
|
||||||
|
;;
|
||||||
|
i[3456]86v4*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
i[3456]86v)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
i[3456]86sol2)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
iris | iris4d)
|
||||||
|
basic_machine=mips-sgi
|
||||||
|
case $os in
|
||||||
|
-irix*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-irix4
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
isi68 | isi)
|
||||||
|
basic_machine=m68k-isi
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
m88k-omron*)
|
||||||
|
basic_machine=m88k-omron
|
||||||
|
;;
|
||||||
|
magnum | m3230)
|
||||||
|
basic_machine=mips-mips
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
merlin)
|
||||||
|
basic_machine=ns32k-utek
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
miniframe)
|
||||||
|
basic_machine=m68000-convergent
|
||||||
|
;;
|
||||||
|
mips3*-*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
|
;;
|
||||||
|
mips3*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
|
;;
|
||||||
|
ncr3000)
|
||||||
|
basic_machine=i486-ncr
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
news | news700 | news800 | news900)
|
||||||
|
basic_machine=m68k-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
news1000)
|
||||||
|
basic_machine=m68030-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
news-3600 | risc-news)
|
||||||
|
basic_machine=mips-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
next | m*-next )
|
||||||
|
basic_machine=m68k-next
|
||||||
|
case $os in
|
||||||
|
-nextstep* )
|
||||||
|
;;
|
||||||
|
-ns2*)
|
||||||
|
os=-nextstep2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
nh3000)
|
||||||
|
basic_machine=m68k-harris
|
||||||
|
os=-cxux
|
||||||
|
;;
|
||||||
|
nh[45]000)
|
||||||
|
basic_machine=m88k-harris
|
||||||
|
os=-cxux
|
||||||
|
;;
|
||||||
|
nindy960)
|
||||||
|
basic_machine=i960-intel
|
||||||
|
os=-nindy
|
||||||
|
;;
|
||||||
|
np1)
|
||||||
|
basic_machine=np1-gould
|
||||||
|
;;
|
||||||
|
pa-hitachi)
|
||||||
|
basic_machine=hppa1.1-hitachi
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
paragon)
|
||||||
|
basic_machine=i860-intel
|
||||||
|
os=-osf
|
||||||
|
;;
|
||||||
|
pbd)
|
||||||
|
basic_machine=sparc-tti
|
||||||
|
;;
|
||||||
|
pbb)
|
||||||
|
basic_machine=m68k-tti
|
||||||
|
;;
|
||||||
|
pc532 | pc532-*)
|
||||||
|
basic_machine=ns32k-pc532
|
||||||
|
;;
|
||||||
|
pentium | p5)
|
||||||
|
basic_machine=i586-intel
|
||||||
|
;;
|
||||||
|
pentiumpro | p6)
|
||||||
|
basic_machine=i686-intel
|
||||||
|
;;
|
||||||
|
pentium-* | p5-*)
|
||||||
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
pentiumpro-* | p6-*)
|
||||||
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
k5)
|
||||||
|
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||||
|
basic_machine=i586-amd
|
||||||
|
;;
|
||||||
|
nexen)
|
||||||
|
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
||||||
|
basic_machine=i586-nexgen
|
||||||
|
;;
|
||||||
|
pn)
|
||||||
|
basic_machine=pn-gould
|
||||||
|
;;
|
||||||
|
power) basic_machine=rs6000-ibm
|
||||||
|
;;
|
||||||
|
ppc) basic_machine=powerpc-unknown
|
||||||
|
;;
|
||||||
|
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||||
|
basic_machine=powerpcle-unknown
|
||||||
|
;;
|
||||||
|
ppcle-* | powerpclittle-*)
|
||||||
|
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
ps2)
|
||||||
|
basic_machine=i386-ibm
|
||||||
|
;;
|
||||||
|
rm[46]00)
|
||||||
|
basic_machine=mips-siemens
|
||||||
|
;;
|
||||||
|
rtpc | rtpc-*)
|
||||||
|
basic_machine=romp-ibm
|
||||||
|
;;
|
||||||
|
sequent)
|
||||||
|
basic_machine=i386-sequent
|
||||||
|
;;
|
||||||
|
sh)
|
||||||
|
basic_machine=sh-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
|
sps7)
|
||||||
|
basic_machine=m68k-bull
|
||||||
|
os=-sysv2
|
||||||
|
;;
|
||||||
|
spur)
|
||||||
|
basic_machine=spur-unknown
|
||||||
|
;;
|
||||||
|
sun2)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
;;
|
||||||
|
sun2os3)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun2os4)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun3os3)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun3os4)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun4os3)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun4os4)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun4sol2)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
sun3 | sun3-*)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
;;
|
||||||
|
sun4)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
;;
|
||||||
|
sun386 | sun386i | roadrunner)
|
||||||
|
basic_machine=i386-sun
|
||||||
|
;;
|
||||||
|
symmetry)
|
||||||
|
basic_machine=i386-sequent
|
||||||
|
os=-dynix
|
||||||
|
;;
|
||||||
|
tower | tower-32)
|
||||||
|
basic_machine=m68k-ncr
|
||||||
|
;;
|
||||||
|
udi29k)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
|
ultra3)
|
||||||
|
basic_machine=a29k-nyu
|
||||||
|
os=-sym1
|
||||||
|
;;
|
||||||
|
vaxv)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
vms)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
os=-vms
|
||||||
|
;;
|
||||||
|
vpp*|vx|vx-*)
|
||||||
|
basic_machine=f301-fujitsu
|
||||||
|
;;
|
||||||
|
vxworks960)
|
||||||
|
basic_machine=i960-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
vxworks68)
|
||||||
|
basic_machine=m68k-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
vxworks29k)
|
||||||
|
basic_machine=a29k-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
xmp)
|
||||||
|
basic_machine=xmp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
xps | xps100)
|
||||||
|
basic_machine=xps100-honeywell
|
||||||
|
;;
|
||||||
|
none)
|
||||||
|
basic_machine=none-none
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||||
|
# some cases the only manufacturer, in others, it is the most popular.
|
||||||
|
mips)
|
||||||
|
basic_machine=mips-mips
|
||||||
|
;;
|
||||||
|
romp)
|
||||||
|
basic_machine=romp-ibm
|
||||||
|
;;
|
||||||
|
rs6000)
|
||||||
|
basic_machine=rs6000-ibm
|
||||||
|
;;
|
||||||
|
vax)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
;;
|
||||||
|
pdp11)
|
||||||
|
basic_machine=pdp11-dec
|
||||||
|
;;
|
||||||
|
we32k)
|
||||||
|
basic_machine=we32k-att
|
||||||
|
;;
|
||||||
|
sparc)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
;;
|
||||||
|
cydra)
|
||||||
|
basic_machine=cydra-cydrome
|
||||||
|
;;
|
||||||
|
orion)
|
||||||
|
basic_machine=orion-highlevel
|
||||||
|
;;
|
||||||
|
orion105)
|
||||||
|
basic_machine=clipper-highlevel
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Here we canonicalize certain aliases for manufacturers.
|
||||||
|
case $basic_machine in
|
||||||
|
*-digital*)
|
||||||
|
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
||||||
|
;;
|
||||||
|
*-commodore*)
|
||||||
|
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Decode manufacturer-specific aliases for certain operating systems.
|
||||||
|
|
||||||
|
if [ x"$os" != x"" ]
|
||||||
|
then
|
||||||
|
case $os in
|
||||||
|
# First match some system type aliases
|
||||||
|
# that might get confused with valid system types.
|
||||||
|
# -solaris* is a basic system type, with this one exception.
|
||||||
|
-solaris1 | -solaris1.*)
|
||||||
|
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||||
|
;;
|
||||||
|
-solaris)
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
-unixware* | svr4*)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-univel*)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-gnu/linux*)
|
||||||
|
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
||||||
|
;;
|
||||||
|
# First accept the basic system types.
|
||||||
|
# The portable systems comes first.
|
||||||
|
# Each alternative MUST END IN A *, to match a version number.
|
||||||
|
# -sysv* is not here because it comes later, after sysvr4.
|
||||||
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||||
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||||
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||||
|
| -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
|
||||||
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
|
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||||
|
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||||
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
|
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -linux-gnu* | -uxpv*)
|
||||||
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
|
;;
|
||||||
|
-linux*)
|
||||||
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
|
;;
|
||||||
|
-sunos5*)
|
||||||
|
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||||
|
;;
|
||||||
|
-sunos6*)
|
||||||
|
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||||
|
;;
|
||||||
|
-osfrose*)
|
||||||
|
os=-osfrose
|
||||||
|
;;
|
||||||
|
-osf*)
|
||||||
|
os=-osf
|
||||||
|
;;
|
||||||
|
-utek*)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
-dynix*)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
-acis*)
|
||||||
|
os=-aos
|
||||||
|
;;
|
||||||
|
-ctix* | -uts*)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
-ns2 )
|
||||||
|
os=-nextstep2
|
||||||
|
;;
|
||||||
|
# Preserve the version number of sinix5.
|
||||||
|
-sinix5.*)
|
||||||
|
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||||
|
;;
|
||||||
|
-sinix*)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-triton*)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-oss*)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-svr4)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-svr3)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-sysvr4)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
# This must come after -sysvr4.
|
||||||
|
-sysv*)
|
||||||
|
;;
|
||||||
|
-xenix)
|
||||||
|
os=-xenix
|
||||||
|
;;
|
||||||
|
-none)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Get rid of the `-' at the beginning of $os.
|
||||||
|
os=`echo $os | sed 's/[^-]*-//'`
|
||||||
|
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
|
||||||
|
# Here we handle the default operating systems that come with various machines.
|
||||||
|
# The value should be what the vendor currently ships out the door with their
|
||||||
|
# machine or put another way, the most popular os provided with the machine.
|
||||||
|
|
||||||
|
# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
||||||
|
# "-sun"), then you have to tell the case statement up towards the top
|
||||||
|
# that MANUFACTURER isn't an operating system. Otherwise, code above
|
||||||
|
# will signal an error saying that MANUFACTURER isn't an operating
|
||||||
|
# system, and we'll never get to this point.
|
||||||
|
|
||||||
|
case $basic_machine in
|
||||||
|
*-acorn)
|
||||||
|
os=-riscix1.2
|
||||||
|
;;
|
||||||
|
arm*-semi)
|
||||||
|
os=-aout
|
||||||
|
;;
|
||||||
|
pdp11-*)
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
*-dec | vax-*)
|
||||||
|
os=-ultrix4.2
|
||||||
|
;;
|
||||||
|
m68*-apollo)
|
||||||
|
os=-domain
|
||||||
|
;;
|
||||||
|
i386-sun)
|
||||||
|
os=-sunos4.0.2
|
||||||
|
;;
|
||||||
|
m68000-sun)
|
||||||
|
os=-sunos3
|
||||||
|
# This also exists in the configure program, but was not the
|
||||||
|
# default.
|
||||||
|
# os=-sunos4
|
||||||
|
;;
|
||||||
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
sparc-* | *-sun)
|
||||||
|
os=-sunos4.1.1
|
||||||
|
;;
|
||||||
|
*-ibm)
|
||||||
|
os=-aix
|
||||||
|
;;
|
||||||
|
*-hp)
|
||||||
|
os=-hpux
|
||||||
|
;;
|
||||||
|
*-hitachi)
|
||||||
|
os=-hiux
|
||||||
|
;;
|
||||||
|
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
*-cbm)
|
||||||
|
os=-amigados
|
||||||
|
;;
|
||||||
|
*-dg)
|
||||||
|
os=-dgux
|
||||||
|
;;
|
||||||
|
*-dolphin)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
m68k-ccur)
|
||||||
|
os=-rtu
|
||||||
|
;;
|
||||||
|
m88k-omron*)
|
||||||
|
os=-luna
|
||||||
|
;;
|
||||||
|
*-next )
|
||||||
|
os=-nextstep
|
||||||
|
;;
|
||||||
|
*-sequent)
|
||||||
|
os=-ptx
|
||||||
|
;;
|
||||||
|
*-crds)
|
||||||
|
os=-unos
|
||||||
|
;;
|
||||||
|
*-ns)
|
||||||
|
os=-genix
|
||||||
|
;;
|
||||||
|
i370-*)
|
||||||
|
os=-mvs
|
||||||
|
;;
|
||||||
|
*-next)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
*-gould)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
*-highlevel)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
*-encore)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
*-sgi)
|
||||||
|
os=-irix
|
||||||
|
;;
|
||||||
|
*-siemens)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
*-masscomp)
|
||||||
|
os=-rtu
|
||||||
|
;;
|
||||||
|
f301-fujitsu)
|
||||||
|
os=-uxpv
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Here we handle the case where we know the os, and the CPU type, but not the
|
||||||
|
# manufacturer. We pick the logical manufacturer.
|
||||||
|
vendor=unknown
|
||||||
|
case $basic_machine in
|
||||||
|
*-unknown)
|
||||||
|
case $os in
|
||||||
|
-riscix*)
|
||||||
|
vendor=acorn
|
||||||
|
;;
|
||||||
|
-sunos*)
|
||||||
|
vendor=sun
|
||||||
|
;;
|
||||||
|
-aix*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
|
-hpux*)
|
||||||
|
vendor=hp
|
||||||
|
;;
|
||||||
|
-hiux*)
|
||||||
|
vendor=hitachi
|
||||||
|
;;
|
||||||
|
-unos*)
|
||||||
|
vendor=crds
|
||||||
|
;;
|
||||||
|
-dgux*)
|
||||||
|
vendor=dg
|
||||||
|
;;
|
||||||
|
-luna*)
|
||||||
|
vendor=omron
|
||||||
|
;;
|
||||||
|
-genix*)
|
||||||
|
vendor=ns
|
||||||
|
;;
|
||||||
|
-mvs*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
|
-ptx*)
|
||||||
|
vendor=sequent
|
||||||
|
;;
|
||||||
|
-vxsim* | -vxworks*)
|
||||||
|
vendor=wrs
|
||||||
|
;;
|
||||||
|
-aux*)
|
||||||
|
vendor=apple
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $basic_machine$os
|
1991
src/interfaces/odbc/configure
vendored
Executable file
1991
src/interfaces/odbc/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
317
src/interfaces/odbc/configure.in
Normal file
317
src/interfaces/odbc/configure.in
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
AC_INIT(bind.c)
|
||||||
|
AC_PREFIX_DEFAULT(/usr/local)
|
||||||
|
|
||||||
|
if test -d ../../interfaces
|
||||||
|
then
|
||||||
|
TEMPLATEDIR=../../template
|
||||||
|
if test "$prefix" = "NONE"
|
||||||
|
then
|
||||||
|
ac_default_prefix=/usr/local/pgsql
|
||||||
|
fi
|
||||||
|
ODBCINSTDIR=
|
||||||
|
else
|
||||||
|
TEMPLATEDIR=./template
|
||||||
|
if test "$prefix" = "NONE"
|
||||||
|
then
|
||||||
|
ODBCINSTDIR=/share
|
||||||
|
else
|
||||||
|
ODBCINSTDIR=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*** configuring psqlodbc ***"
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
solaris*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
sparc) os=sparc_solaris ;;
|
||||||
|
i386) os=i386_solaris ;;
|
||||||
|
esac ;;
|
||||||
|
sunos*) os=sunos4 ;;
|
||||||
|
aux*) os=aux ;;
|
||||||
|
linux*) os=linux ;;
|
||||||
|
bsdi*) os=bsdi ;;
|
||||||
|
freebsd*|netbsd*|openbsd*) os=bsd ;;
|
||||||
|
dgux*) os=dgux ;;
|
||||||
|
aix*) os=aix ;;
|
||||||
|
nextstep*) os=nextstep ;;
|
||||||
|
ultrix*) os=ultrix4 ;;
|
||||||
|
irix*) os=irix5 ;;
|
||||||
|
hpux*) os=hpux ;;
|
||||||
|
osf*) os=alpha ;;
|
||||||
|
sco*) os=sco ;;
|
||||||
|
machten*) os=machten ;;
|
||||||
|
cygwin*) os=win ;;
|
||||||
|
sysv4.2*)
|
||||||
|
case "$host_vendor" in
|
||||||
|
univel) os=univel ;;
|
||||||
|
*) os=unknown ;;
|
||||||
|
esac ;;
|
||||||
|
sysv4*) os=svr4 ;;
|
||||||
|
*) echo ""
|
||||||
|
echo "*************************************************************"
|
||||||
|
echo "configure does not currently recognize your operating system,"
|
||||||
|
echo "therefore you must do a manual configuration of:"
|
||||||
|
echo "$host_os"
|
||||||
|
echo "Please contact scrappy@hub.org to see about rectifying this, "
|
||||||
|
echo "including the above 'checking host system type...' line "
|
||||||
|
echo "*************************************************************"
|
||||||
|
echo ""
|
||||||
|
exit;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
PORTNAME=${os}
|
||||||
|
|
||||||
|
AC_SUBST(PORTNAME)
|
||||||
|
|
||||||
|
echo "checking echo setting..."
|
||||||
|
if echo '\c' | grep -s c >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
ECHO_N="echo -n"
|
||||||
|
ECHO_C=""
|
||||||
|
else
|
||||||
|
ECHO_N="echo"
|
||||||
|
ECHO_C='\c'
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl cat <<EOT
|
||||||
|
dnl **************************************************************
|
||||||
|
dnl Postodbc v0.0250 Installation Program
|
||||||
|
dnl
|
||||||
|
dnl Welcome to the new improved Postodbc installation program.
|
||||||
|
dnl This configuration program is for version 0.0250 of the
|
||||||
|
dnl Postodbc software.
|
||||||
|
dnl
|
||||||
|
dnl EOT
|
||||||
|
|
||||||
|
dnl this part selects the template from the one in the
|
||||||
|
dnl template directory.
|
||||||
|
|
||||||
|
dnl if test "X$with_template" != "X"
|
||||||
|
dnl then
|
||||||
|
dnl TEMPLATE=template/$with_template
|
||||||
|
dnl else
|
||||||
|
dnl TEMPLATE=DO_NOT_CHANGE_THIS_INVALID_FILENAME
|
||||||
|
dnl fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(setting template to)
|
||||||
|
AC_ARG_WITH(template,
|
||||||
|
[ --with-template=TEMPLATE
|
||||||
|
use operating system template file
|
||||||
|
see template directory],
|
||||||
|
[ TEMPLATE=$withval ],
|
||||||
|
[ host_no_ver=`echo "$host" | sed 's/[[0-9.]]*$//'`
|
||||||
|
GUESS=`grep "$host_no_ver" $TEMPLATEDIR/.similar | sed 's/.*=//' | tail -1`
|
||||||
|
if test "$GUESS"
|
||||||
|
then TEMPLATE="$GUESS"
|
||||||
|
else TEMPLATE=`uname -s | tr A-Z a-z`
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT($TEMPLATE)
|
||||||
|
|
||||||
|
if test ! -d "$TEMPLATEDIR"
|
||||||
|
then
|
||||||
|
cat << EOT
|
||||||
|
**************************************************************
|
||||||
|
You seem to be missing the template directory needed by
|
||||||
|
configure. If you just copied the source from the Postgres
|
||||||
|
distribution you should instead have issued the command
|
||||||
|
'make standalone' which would have built a distribution
|
||||||
|
containing the necessary template directory. The other
|
||||||
|
option is that your trying to build from the source
|
||||||
|
which is meant to be placed in the Postgres distribution
|
||||||
|
directory 'interfaces/odbc'. Depending on your case either get the
|
||||||
|
standalone source from the following Web site:
|
||||||
|
|
||||||
|
www.insightdist.com/psqlodbc/
|
||||||
|
|
||||||
|
or issue the 'make standalone' command from the
|
||||||
|
'interfaces/odbc' directory of your Postgres Distribution,
|
||||||
|
or copy the distribution file you have to your Postgres
|
||||||
|
distribution's 'interfaces/odbc' directory and try
|
||||||
|
again.
|
||||||
|
|
||||||
|
If neither of these is the case than please complain
|
||||||
|
kindly to the maintainers, their e-mail addresses can
|
||||||
|
be found in the Readme files.
|
||||||
|
*************************************************************
|
||||||
|
EOT
|
||||||
|
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
|
||||||
|
if test ! -f "$TEMPLATEDIR/$TEMPLATE"
|
||||||
|
then
|
||||||
|
cat <<EOT
|
||||||
|
Please select a template from the ones listed below. If no
|
||||||
|
template is available, then select the 'generic' one and
|
||||||
|
consider emailling scrappy@hub.org with the above line which
|
||||||
|
starts 'checking host system type...'
|
||||||
|
**************************************************************
|
||||||
|
EOT
|
||||||
|
TEMPLATE=generic
|
||||||
|
GUESS=`grep "^$host_no_ver=" $TEMPLATEDIR/.similar 2>/dev/null`
|
||||||
|
if test ! "$GUESS"
|
||||||
|
then host_no_ver=`echo "$host" | sed 's/[[0-9.]]*$//'`
|
||||||
|
GUESS=`grep "$host_no_ver" $TEMPLATEDIR/.similar 2>/dev/null`
|
||||||
|
fi
|
||||||
|
if test "$GUESS"
|
||||||
|
then
|
||||||
|
TEMPLATE=`echo $GUESS | sed 's/.*=//'`
|
||||||
|
fi
|
||||||
|
export TEMPLATE
|
||||||
|
ls $TEMPLATEDIR
|
||||||
|
echo "**************************************************************"
|
||||||
|
$ECHO_N "Appropriate template file { $TEMPLATE }: $ECHO_C"
|
||||||
|
read a
|
||||||
|
if test "$a." != "."
|
||||||
|
then
|
||||||
|
TEMPLATE=$a
|
||||||
|
fi
|
||||||
|
if test ! -f $TEMPLATEDIR/$TEMPLATE
|
||||||
|
then
|
||||||
|
echo "You must choose an appropriate template file."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
TEMPLATE=$TEMPLATEDIR/$TEMPLATE
|
||||||
|
export TEMPLATE
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
AROPT=`grep '^AROPT:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
SHARED_LIB=`grep '^SHARED_LIB:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
CFLAGS=`grep '^CFLAGS:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
SRCH_INC=`grep '^SRCH_INC:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
SRCH_LIB=`grep '^SRCH_LIB:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
DLSUFFIX=`grep '^DLSUFFIX:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
DL_LIB=`grep '^DL_LIB:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
CC=`grep '^CC:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
LIBS=`grep '^LIBS:' $TEMPLATE | awk -F: '{print $2}'`
|
||||||
|
|
||||||
|
|
||||||
|
a=$SRCH_INC
|
||||||
|
CPPFLAGS=`echo "$a" | sed 's@ *@ @g; s@^\([[^ ]]\)@-I\1@; s@ \([[^ ]]\)@ -I\1@g'`
|
||||||
|
|
||||||
|
export CPPFLAGS
|
||||||
|
echo "- setting CPPFLAGS=$CPPFLAGS"
|
||||||
|
|
||||||
|
a=$SRCH_LIB
|
||||||
|
LDFLAGS=`echo "$a" | sed 's@ *@ @g; s@^\([[^ ]]\)@-L\1@; s@ \([[^ ]]\)@ -L\1@g'`
|
||||||
|
|
||||||
|
export LDFLAGS
|
||||||
|
echo "- setting LDFLAGS=$LDFLAGS"
|
||||||
|
|
||||||
|
dnl Allow for overriding the default location of the odbcinst.ini
|
||||||
|
dnl file which is normally ${prefix}/share or ${prefix} if this is
|
||||||
|
dnl being compiled inside the postgres distribution.
|
||||||
|
AC_MSG_CHECKING(setting ODBCINST)
|
||||||
|
AC_ARG_WITH(
|
||||||
|
odbcinst,
|
||||||
|
[ --with-odbcinst=<datadir> change default directory for odbcinst.ini],
|
||||||
|
AC_DEFINE_UNQUOTED(ODBCINST, ${with_odbcinst}) AC_MSG_RESULT($with_odbcinst),
|
||||||
|
AC_DEFINE_UNQUOTED(ODBCINST, ${ODBCINSTDIR}) AC_MSG_RESULT(${ODBCINSTDIR})
|
||||||
|
)
|
||||||
|
|
||||||
|
if test "X$with_odbcinst" != "X"
|
||||||
|
then
|
||||||
|
ODBCINSTDIR=$with_odbcinst
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(ODBCINSTDIR)
|
||||||
|
|
||||||
|
if test "X$with_compiler" != "X"
|
||||||
|
then
|
||||||
|
CC=$with_compiler
|
||||||
|
else
|
||||||
|
AC_PROG_CC
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
|
dnl Checks for programs.
|
||||||
|
AC_PROG_CPP
|
||||||
|
|
||||||
|
AC_SUBST(PORTNAME)
|
||||||
|
AC_SUBST(LDFLAGS)
|
||||||
|
AC_SUBST(CPPFLAGS)
|
||||||
|
AC_SUBST(AROPT)
|
||||||
|
AC_SUBST(SHARED_LIB)
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
AC_SUBST(DLSUFFIX)
|
||||||
|
AC_SUBST(DL_LIB)
|
||||||
|
|
||||||
|
INSTALLPATH="/usr/ucb:$PATH"
|
||||||
|
AC_PATH_PROGS(INSTALL, ginstall installbsd bsdinst scoinst install, NONE, $INSTALLPATH)
|
||||||
|
if test $INSTALL = "NONE"
|
||||||
|
then
|
||||||
|
echo "- No Install Script found - aborting."
|
||||||
|
exit 0;
|
||||||
|
fi
|
||||||
|
|
||||||
|
INSTLOPTS="-m 444"
|
||||||
|
INSTL_EXE_OPTS="-m 555"
|
||||||
|
INSTL_LIB_OPTS="-m 644"
|
||||||
|
|
||||||
|
case "`basename $INSTALL`" in
|
||||||
|
install|installbsd|scoinst)
|
||||||
|
INSTLOPTS="-c $INSTLOPTS"
|
||||||
|
INSTL_EXE_OPTS="-c $INSTL_EXE_OPTS"
|
||||||
|
INSTL_LIB_OPTS="-c $INSTL_LIB_OPTS";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "- Using $INSTALL"
|
||||||
|
AC_SUBST(INSTALL)
|
||||||
|
AC_SUBST(INSTLOPTS)
|
||||||
|
AC_SUBST(INSTL_LIB_OPTS)
|
||||||
|
AC_SUBST(INSTL_EXE_OPTS)
|
||||||
|
|
||||||
|
dnl Check the option to echo to inhibit newlines.
|
||||||
|
ECHO_N_OUT=`echo -n "" | wc -c`
|
||||||
|
ECHO_C_OUT=`echo "\c" | wc -c`
|
||||||
|
if test "$ECHO_N_OUT" -eq 0; then
|
||||||
|
DASH_N='-n'
|
||||||
|
BACKSLASH_C=
|
||||||
|
else
|
||||||
|
if test "ECHO_C_OUT" -eq 0; then
|
||||||
|
DASH_N=
|
||||||
|
BACKSLASH_C='\\\\c'
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR("echo behaviour undetermined")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_SUBST(DASH_N)
|
||||||
|
AC_SUBST(BACKSLASH_C)
|
||||||
|
|
||||||
|
AC_PROG_LN_S
|
||||||
|
AC_PROG_MAKE_SET
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
AC_PATH_PROG(find, find)
|
||||||
|
AC_PATH_PROG(tar, tar)
|
||||||
|
AC_PATH_PROG(split,split)
|
||||||
|
|
||||||
|
AC_CHECK_LIB(c, main)
|
||||||
|
AC_CHECK_LIB(m, main)
|
||||||
|
AC_CHECK_LIB(dl, main)
|
||||||
|
|
||||||
|
dnl Checks for header files.
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_CHECK_HEADERS(sys/param.h pwd.h)
|
||||||
|
|
||||||
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
|
||||||
|
dnl Check for any "odd" conditions
|
||||||
|
|
||||||
|
dnl Checks for library functions.
|
||||||
|
AC_CHECK_FUNCS(stricmp)
|
||||||
|
|
||||||
|
dnl Check for X libraries
|
||||||
|
|
||||||
|
dnl Check for X library
|
||||||
|
|
||||||
|
AC_OUTPUT(GNUmakefile Makefile.global)
|
@ -23,7 +23,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
#include <odbcinst.h>
|
#include <odbcinst.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -39,10 +39,12 @@ RETCODE SQL_API SQLAllocConnect(
|
|||||||
{
|
{
|
||||||
EnvironmentClass *env = (EnvironmentClass *)henv;
|
EnvironmentClass *env = (EnvironmentClass *)henv;
|
||||||
ConnectionClass *conn;
|
ConnectionClass *conn;
|
||||||
char *func="SQLAllocConnect";
|
static char *func="SQLAllocConnect";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
conn = CC_Constructor();
|
conn = CC_Constructor();
|
||||||
mylog("**** SQLAllocConnect: henv = %u, conn = %u\n", henv, conn);
|
mylog("**** %s: henv = %u, conn = %u\n", func, henv, conn);
|
||||||
|
|
||||||
if( ! conn) {
|
if( ! conn) {
|
||||||
env->errormsg = "Couldn't allocate memory for Connection object.";
|
env->errormsg = "Couldn't allocate memory for Connection object.";
|
||||||
@ -80,7 +82,9 @@ RETCODE SQL_API SQLConnect(
|
|||||||
{
|
{
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
ConnInfo *ci;
|
ConnInfo *ci;
|
||||||
char *func = "SQLConnect";
|
static char *func = "SQLConnect";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! conn) {
|
if ( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
@ -103,7 +107,7 @@ char *func = "SQLConnect";
|
|||||||
/* fill in any defaults */
|
/* fill in any defaults */
|
||||||
getDSNdefaults(ci);
|
getDSNdefaults(ci);
|
||||||
|
|
||||||
qlog("conn = %u, SQLConnect(DSN='%s', UID='%s', PWD='%s')\n", conn, ci->dsn, ci->username, ci->password);
|
qlog("conn = %u, %s(DSN='%s', UID='%s', PWD='%s')\n", conn, func, ci->dsn, ci->username, ci->password);
|
||||||
|
|
||||||
if ( CC_connect(conn, FALSE) <= 0) {
|
if ( CC_connect(conn, FALSE) <= 0) {
|
||||||
// Error messages are filled in
|
// Error messages are filled in
|
||||||
@ -111,6 +115,8 @@ char *func = "SQLConnect";
|
|||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mylog( "%s: returning...\n", func);
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,6 +130,10 @@ RETCODE SQL_API SQLBrowseConnect(
|
|||||||
SWORD cbConnStrOutMax,
|
SWORD cbConnStrOutMax,
|
||||||
SWORD FAR *pcbConnStrOut)
|
SWORD FAR *pcbConnStrOut)
|
||||||
{
|
{
|
||||||
|
static char *func="SQLBrowseConnect";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,16 +144,17 @@ RETCODE SQL_API SQLDisconnect(
|
|||||||
HDBC hdbc)
|
HDBC hdbc)
|
||||||
{
|
{
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
char *func = "SQLDisconnect";
|
static char *func = "SQLDisconnect";
|
||||||
|
|
||||||
mylog("**** in SQLDisconnect\n");
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! conn) {
|
if ( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
qlog("conn=%u, SQLDisconnect\n", conn);
|
qlog("conn=%u, %s\n", conn, func);
|
||||||
|
|
||||||
if (conn->status == CONN_EXECUTING) {
|
if (conn->status == CONN_EXECUTING) {
|
||||||
conn->errornumber = CONN_IN_USE;
|
conn->errornumber = CONN_IN_USE;
|
||||||
@ -152,13 +163,13 @@ char *func = "SQLDisconnect";
|
|||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("SQLDisconnect: about to CC_cleanup\n");
|
mylog("%s: about to CC_cleanup\n", func);
|
||||||
|
|
||||||
/* Close the connection and free statements */
|
/* Close the connection and free statements */
|
||||||
CC_cleanup(conn);
|
CC_cleanup(conn);
|
||||||
|
|
||||||
mylog("SQLDisconnect: done CC_cleanup\n");
|
mylog("%s: done CC_cleanup\n", func);
|
||||||
mylog("exit SQLDisconnect\n");
|
mylog("%s: returning...\n", func);
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -170,9 +181,10 @@ RETCODE SQL_API SQLFreeConnect(
|
|||||||
HDBC hdbc)
|
HDBC hdbc)
|
||||||
{
|
{
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
char *func = "SQLFreeConnect";
|
static char *func = "SQLFreeConnect";
|
||||||
|
|
||||||
mylog("**** in SQLFreeConnect: hdbc=%u\n", hdbc);
|
mylog( "%s: entering...\n", func);
|
||||||
|
mylog("**** in %s: hdbc=%u\n", func, hdbc);
|
||||||
|
|
||||||
if ( ! conn) {
|
if ( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
@ -189,7 +201,7 @@ char *func = "SQLFreeConnect";
|
|||||||
|
|
||||||
CC_Destructor(conn);
|
CC_Destructor(conn);
|
||||||
|
|
||||||
mylog("exit SQLFreeConnect\n");
|
mylog("%s: returning...\n", func);
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -201,8 +213,7 @@ char *func = "SQLFreeConnect";
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ConnectionClass
|
ConnectionClass *CC_Constructor()
|
||||||
*CC_Constructor()
|
|
||||||
{
|
{
|
||||||
ConnectionClass *rv;
|
ConnectionClass *rv;
|
||||||
|
|
||||||
@ -381,10 +392,12 @@ StatementClass *stmt;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check for translation dll */
|
/* Check for translation dll */
|
||||||
|
#ifdef WIN32
|
||||||
if ( self->translation_handle) {
|
if ( self->translation_handle) {
|
||||||
FreeLibrary (self->translation_handle);
|
FreeLibrary (self->translation_handle);
|
||||||
self->translation_handle = NULL;
|
self->translation_handle = NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
mylog("exit CC_Cleanup\n");
|
mylog("exit CC_Cleanup\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -394,6 +407,8 @@ int
|
|||||||
CC_set_translation (ConnectionClass *self)
|
CC_set_translation (ConnectionClass *self)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
if (self->translation_handle != NULL) {
|
if (self->translation_handle != NULL) {
|
||||||
FreeLibrary (self->translation_handle);
|
FreeLibrary (self->translation_handle);
|
||||||
self->translation_handle = NULL;
|
self->translation_handle = NULL;
|
||||||
@ -424,7 +439,7 @@ CC_set_translation (ConnectionClass *self)
|
|||||||
self->errormsg = "Could not find translation DLL functions.";
|
self->errormsg = "Could not find translation DLL functions.";
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,6 +455,9 @@ int areq = -1;
|
|||||||
int beresp;
|
int beresp;
|
||||||
char msgbuffer[ERROR_MSG_LENGTH];
|
char msgbuffer[ERROR_MSG_LENGTH];
|
||||||
char salt[2];
|
char salt[2];
|
||||||
|
static char *func="CC_connect";
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if ( do_password)
|
if ( do_password)
|
||||||
|
|
||||||
@ -447,7 +465,8 @@ char salt[2];
|
|||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
||||||
qlog("Global Options: fetch=%d, socket=%d, unknown_sizes=%d, max_varchar_size=%d, max_longvarchar_size=%d\n",
|
qlog("Global Options: Version='%s', fetch=%d, socket=%d, unknown_sizes=%d, max_varchar_size=%d, max_longvarchar_size=%d\n",
|
||||||
|
POSTGRESDRIVERVERSION,
|
||||||
globals.fetch_max,
|
globals.fetch_max,
|
||||||
globals.socket_buffersize,
|
globals.socket_buffersize,
|
||||||
globals.unknown_sizes,
|
globals.unknown_sizes,
|
||||||
@ -477,8 +496,7 @@ char salt[2];
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s', database = '%s', username = '%s', password='%s'\n",
|
mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s', database = '%s', username = '%s', password='%s'\n", ci->dsn, ci->server, ci->port, ci->database, ci->username, ci->password);
|
||||||
ci->dsn, ci->server, ci->port, ci->database, ci->username, ci->password);
|
|
||||||
|
|
||||||
/* If the socket was closed for some reason (like a SQLDisconnect, but no SQLFreeConnect
|
/* If the socket was closed for some reason (like a SQLDisconnect, but no SQLFreeConnect
|
||||||
then create a socket now.
|
then create a socket now.
|
||||||
@ -668,11 +686,13 @@ char salt[2];
|
|||||||
CC_send_settings(self);
|
CC_send_settings(self);
|
||||||
CC_lookup_lo(self); /* a hack to get the oid of our large object oid type */
|
CC_lookup_lo(self); /* a hack to get the oid of our large object oid type */
|
||||||
|
|
||||||
// CC_test(self);
|
// CC_test(self);
|
||||||
|
|
||||||
CC_clear_error(self); /* clear any initial command errors */
|
CC_clear_error(self); /* clear any initial command errors */
|
||||||
self->status = CONN_CONNECTED;
|
self->status = CONN_CONNECTED;
|
||||||
|
|
||||||
|
mylog("%s: returning...\n", func);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -837,7 +857,7 @@ char cmdbuffer[MAX_MESSAGE_LEN+1]; // QR_set_command() dups this string so dont
|
|||||||
mylog("send_query: done sending query\n");
|
mylog("send_query: done sending query\n");
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
/* what type of message is comming now ? */
|
/* what type of message is coming now ? */
|
||||||
id = SOCK_get_char(sock);
|
id = SOCK_get_char(sock);
|
||||||
|
|
||||||
if ((SOCK_get_errcode(sock) != 0) || (id == EOF)) {
|
if ((SOCK_get_errcode(sock) != 0) || (id == EOF)) {
|
||||||
@ -884,7 +904,7 @@ char cmdbuffer[MAX_MESSAGE_LEN+1]; // QR_set_command() dups this string so dont
|
|||||||
QR_set_command(res, cmdbuffer);
|
QR_set_command(res, cmdbuffer);
|
||||||
|
|
||||||
/* (Quotation from the original comments)
|
/* (Quotation from the original comments)
|
||||||
since backend may produze more than one result for some commands
|
since backend may produce more than one result for some commands
|
||||||
we need to poll until clear
|
we need to poll until clear
|
||||||
so we send an empty query, and keep reading out of the pipe
|
so we send an empty query, and keep reading out of the pipe
|
||||||
until an 'I' is received
|
until an 'I' is received
|
||||||
@ -1039,8 +1059,7 @@ int i;
|
|||||||
|
|
||||||
for (i = 0; i < nargs; ++i) {
|
for (i = 0; i < nargs; ++i) {
|
||||||
|
|
||||||
mylog(" arg[%d]: len = %d, isint = %d, integer = %d, ptr = %u\n",
|
mylog(" arg[%d]: len = %d, isint = %d, integer = %d, ptr = %u\n", i, args[i].len, args[i].isint, args[i].u.integer, args[i].u.ptr);
|
||||||
i, args[i].len, args[i].isint, args[i].u.integer, args[i].u.ptr);
|
|
||||||
|
|
||||||
SOCK_put_int(sock, args[i].len, 4);
|
SOCK_put_int(sock, args[i].len, 4);
|
||||||
if (args[i].isint)
|
if (args[i].isint)
|
||||||
@ -1148,58 +1167,86 @@ int i;
|
|||||||
char
|
char
|
||||||
CC_send_settings(ConnectionClass *self)
|
CC_send_settings(ConnectionClass *self)
|
||||||
{
|
{
|
||||||
char ini_query[MAX_MESSAGE_LEN];
|
// char ini_query[MAX_MESSAGE_LEN];
|
||||||
ConnInfo *ci = &(self->connInfo);
|
ConnInfo *ci = &(self->connInfo);
|
||||||
// QResultClass *res;
|
// QResultClass *res;
|
||||||
HSTMT hstmt;
|
HSTMT hstmt;
|
||||||
StatementClass *stmt;
|
StatementClass *stmt;
|
||||||
RETCODE result;
|
RETCODE result;
|
||||||
SWORD cols = 0;
|
char status = TRUE;
|
||||||
|
char *cs, *ptr;
|
||||||
|
static char *func="CC_send_settings";
|
||||||
|
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
/* This function must use the local odbc API functions since the odbc state
|
/* This function must use the local odbc API functions since the odbc state
|
||||||
has not transitioned to "connected" yet.
|
has not transitioned to "connected" yet.
|
||||||
*/
|
*/
|
||||||
result = _SQLAllocStmt( self, &hstmt);
|
|
||||||
|
result = SQLAllocStmt( self, &hstmt);
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
stmt = (StatementClass *) hstmt;
|
stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
ini_query[0] = '\0';
|
stmt->internal = TRUE; /* ensure no BEGIN/COMMIT/ABORT stuff */
|
||||||
|
|
||||||
/* Set the Datestyle to the format the driver expects it to be in */
|
/* Set the Datestyle to the format the driver expects it to be in */
|
||||||
sprintf(ini_query, "set DateStyle to 'ISO'");
|
result = SQLExecDirect(hstmt, "set DateStyle to 'ISO'", SQL_NTS);
|
||||||
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
|
||||||
|
status = FALSE;
|
||||||
|
|
||||||
|
mylog("%s: result %d, status %d from set DateStyle\n", func, result, status);
|
||||||
|
|
||||||
/* Disable genetic optimizer based on global flag */
|
/* Disable genetic optimizer based on global flag */
|
||||||
if (globals.disable_optimizer)
|
if (globals.disable_optimizer) {
|
||||||
sprintf(&ini_query[strlen(ini_query)], "%sset geqo to 'OFF'",
|
result = SQLExecDirect(hstmt, "set geqo to 'OFF'", SQL_NTS);
|
||||||
ini_query[0] != '\0' ? "; " : "");
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
|
||||||
|
status = FALSE;
|
||||||
|
|
||||||
|
mylog("%s: result %d, status %d from set geqo\n", func, result, status);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* Global settings */
|
/* Global settings */
|
||||||
if (globals.conn_settings[0] != '\0')
|
if (globals.conn_settings[0] != '\0') {
|
||||||
sprintf(&ini_query[strlen(ini_query)], "%s%s",
|
cs = strdup(globals.conn_settings);
|
||||||
ini_query[0] != '\0' ? "; " : "",
|
ptr = strtok(cs, ";");
|
||||||
globals.conn_settings);
|
while (ptr) {
|
||||||
|
result = SQLExecDirect(hstmt, ptr, SQL_NTS);
|
||||||
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
|
||||||
|
status = FALSE;
|
||||||
|
|
||||||
/* Per Datasource settings */
|
mylog("%s: result %d, status %d from '%s'\n", func, result, status, ptr);
|
||||||
if (ci->conn_settings[0] != '\0')
|
|
||||||
sprintf(&ini_query[strlen(ini_query)], "%s%s",
|
|
||||||
ini_query[0] != '\0' ? "; " : "",
|
|
||||||
ci->conn_settings);
|
|
||||||
|
|
||||||
if (ini_query[0] != '\0') {
|
ptr = strtok(NULL, ";");
|
||||||
mylog("Sending Initial Connection query: '%s'\n", ini_query);
|
|
||||||
|
|
||||||
result = _SQLExecDirect(hstmt, ini_query, SQL_NTS);
|
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
|
||||||
_SQLFreeStmt(hstmt, SQL_DROP);
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_SQLFreeStmt(hstmt, SQL_DROP);
|
free(cs);
|
||||||
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
|
||||||
|
/* Per Datasource settings */
|
||||||
|
if (ci->conn_settings[0] != '\0') {
|
||||||
|
cs = strdup(ci->conn_settings);
|
||||||
|
ptr = strtok(cs, ";");
|
||||||
|
while (ptr) {
|
||||||
|
result = SQLExecDirect(hstmt, ptr, SQL_NTS);
|
||||||
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO))
|
||||||
|
status = FALSE;
|
||||||
|
|
||||||
|
mylog("%s: result %d, status %d from '%s'\n", func, result, status, ptr);
|
||||||
|
|
||||||
|
ptr = strtok(NULL, ";");
|
||||||
|
}
|
||||||
|
|
||||||
|
free(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SQLFreeStmt(hstmt, SQL_DROP);
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is just a hack to get the oid of our Large Object oid type.
|
/* This function is just a hack to get the oid of our Large Object oid type.
|
||||||
@ -1212,40 +1259,41 @@ CC_lookup_lo(ConnectionClass *self)
|
|||||||
HSTMT hstmt;
|
HSTMT hstmt;
|
||||||
StatementClass *stmt;
|
StatementClass *stmt;
|
||||||
RETCODE result;
|
RETCODE result;
|
||||||
|
static char *func = "CC_lookup_lo";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
/* This function must use the local odbc API functions since the odbc state
|
/* This function must use the local odbc API functions since the odbc state
|
||||||
has not transitioned to "connected" yet.
|
has not transitioned to "connected" yet.
|
||||||
*/
|
*/
|
||||||
result = _SQLAllocStmt( self, &hstmt);
|
result = SQLAllocStmt( self, &hstmt);
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stmt = (StatementClass *) hstmt;
|
stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
result = _SQLExecDirect(hstmt, "select oid from pg_type where typname='" \
|
result = SQLExecDirect(hstmt, "select oid from pg_type where typname='" PG_TYPE_LO_NAME "'", SQL_NTS);
|
||||||
PG_TYPE_LO_NAME \
|
|
||||||
"'", SQL_NTS);
|
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
_SQLFreeStmt(hstmt, SQL_DROP);
|
SQLFreeStmt(hstmt, SQL_DROP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = _SQLFetch(hstmt);
|
result = SQLFetch(hstmt);
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
_SQLFreeStmt(hstmt, SQL_DROP);
|
SQLFreeStmt(hstmt, SQL_DROP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = _SQLGetData(hstmt, 1, SQL_C_SLONG, &self->lobj_type, sizeof(self->lobj_type), NULL);
|
result = SQLGetData(hstmt, 1, SQL_C_SLONG, &self->lobj_type, sizeof(self->lobj_type), NULL);
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
_SQLFreeStmt(hstmt, SQL_DROP);
|
SQLFreeStmt(hstmt, SQL_DROP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("Got the large object oid: %d\n", self->lobj_type);
|
mylog("Got the large object oid: %d\n", self->lobj_type);
|
||||||
qlog(" [ Large Object oid = %d ]\n", self->lobj_type);
|
qlog(" [ Large Object oid = %d ]\n", self->lobj_type);
|
||||||
|
|
||||||
result = _SQLFreeStmt(hstmt, SQL_DROP);
|
result = SQLFreeStmt(hstmt, SQL_DROP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1253,6 +1301,7 @@ CC_log_error(char *func, char *desc, ConnectionClass *self)
|
|||||||
{
|
{
|
||||||
if (self) {
|
if (self) {
|
||||||
qlog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
qlog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
||||||
|
mylog("CONN ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
||||||
qlog(" ------------------------------------------------------------\n");
|
qlog(" ------------------------------------------------------------\n");
|
||||||
qlog(" henv=%u, conn=%u, status=%u, num_stmts=%d\n", self->henv, self, self->status, self->num_stmts);
|
qlog(" henv=%u, conn=%u, status=%u, num_stmts=%d\n", self->henv, self, self->status, self->num_stmts);
|
||||||
qlog(" sock=%u, stmts=%u, lobj_type=%d\n", self->sock, self->stmts, self->lobj_type);
|
qlog(" sock=%u, stmts=%u, lobj_type=%d\n", self->sock, self->stmts, self->lobj_type);
|
||||||
@ -1273,43 +1322,103 @@ CC_log_error(char *func, char *desc, ConnectionClass *self)
|
|||||||
void
|
void
|
||||||
CC_test(ConnectionClass *self)
|
CC_test(ConnectionClass *self)
|
||||||
{
|
{
|
||||||
|
static char *func = "CC_test";
|
||||||
HSTMT hstmt1;
|
HSTMT hstmt1;
|
||||||
RETCODE result;
|
RETCODE result;
|
||||||
SDWORD pcbValue;
|
char pktab[255], fktab[255], pkcol[255], fkcol[255], tgname[255];
|
||||||
UDWORD pcrow;
|
SDWORD pktab_len, pkcol_len, fktab_len, fkcol_len, ur_len, dr_len, tgname_len;
|
||||||
UWORD rgfRowStatus;
|
SWORD cols, seq;
|
||||||
char name[255], type[255];
|
SDWORD update_rule, delete_rule;
|
||||||
SDWORD namelen, typelen;
|
|
||||||
SWORD cols;
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
result = SQLAllocStmt( self, &hstmt1);
|
result = SQLAllocStmt( self, &hstmt1);
|
||||||
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SQLTables(hstmt1, "", SQL_NTS, "", SQL_NTS, "", SQL_NTS, "", SQL_NTS);
|
result = SQLPrimaryKeys(hstmt1, NULL, 0, NULL, 0, "t1", SQL_NTS);
|
||||||
qlog("SQLTables result = %d\n", result);
|
|
||||||
|
qlog("SQLPrimaryKeys result = %d\n", result);
|
||||||
|
|
||||||
result = SQLNumResultCols(hstmt1, &cols);
|
result = SQLNumResultCols(hstmt1, &cols);
|
||||||
qlog("cols SQLTables result = %d\n", result);
|
qlog("cols SQLTables result = %d\n", result);
|
||||||
|
|
||||||
result = SQLBindCol(hstmt1, 3, SQL_C_CHAR, name, sizeof(name), &namelen);
|
result = SQLBindCol(hstmt1, 3, SQL_C_CHAR, pktab, sizeof(pktab), &pktab_len);
|
||||||
qlog("bind result = %d\n", result);
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
result = SQLBindCol(hstmt1, 4, SQL_C_CHAR, type, sizeof(type), &typelen);
|
result = SQLBindCol(hstmt1, 4, SQL_C_CHAR, pkcol, sizeof(pkcol), &pkcol_len);
|
||||||
qlog("bind result = %d\n", result);
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 5, SQL_C_SHORT, &seq, 0, NULL);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
result = SQLFetch(hstmt1);
|
result = SQLFetch(hstmt1);
|
||||||
qlog("SQLFetch result = %d\n", result);
|
qlog("SQLFetch result = %d\n", result);
|
||||||
while (result != SQL_NO_DATA_FOUND) {
|
while (result != SQL_NO_DATA_FOUND) {
|
||||||
qlog("fetch on stmt1: result=%d, namelen=%d: name='%s', typelen=%d, type='%s'\n", result, namelen, name, typelen, type);
|
qlog("fetch on stmt1: result = %d, pktab='%s', pkcol='%s', seq=%d\n",
|
||||||
|
result, pktab, pkcol, seq);
|
||||||
|
|
||||||
result = SQLFetch(hstmt1);
|
result = SQLFetch(hstmt1);
|
||||||
}
|
}
|
||||||
qlog("SQLFetch result = %d\n", result);
|
qlog("SQLFetch result = %d\n", result);
|
||||||
|
|
||||||
|
// Test of case #1
|
||||||
|
result = SQLForeignKeys(hstmt1, "", SQL_NTS, "", SQL_NTS, "t1", SQL_NTS,
|
||||||
|
NULL, 0, NULL, 0, NULL, 0);
|
||||||
|
|
||||||
|
// Test of case #2
|
||||||
|
result = SQLForeignKeys(hstmt1, "", SQL_NTS, "", SQL_NTS, NULL, 0,
|
||||||
|
NULL, 0, NULL, 0, "ar_register", SQL_NTS);
|
||||||
|
|
||||||
|
|
||||||
|
// Test of case #3
|
||||||
|
result = SQLForeignKeys(hstmt1, NULL, 0, NULL, 0, "employee", SQL_NTS,
|
||||||
|
NULL, 0, NULL, 0, "invoice", SQL_NTS);
|
||||||
|
|
||||||
|
qlog("SQLForeignKeys result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLNumResultCols(hstmt1, &cols);
|
||||||
|
qlog("cols SQLTables result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 3, SQL_C_CHAR, pktab, sizeof(pktab), &pktab_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 4, SQL_C_CHAR, pkcol, sizeof(pkcol), &pkcol_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 7, SQL_C_CHAR, fktab, sizeof(fktab), &fktab_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 8, SQL_C_CHAR, fkcol, sizeof(fkcol), &fkcol_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 9, SQL_C_SHORT, &seq, 0, NULL);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 10, SQL_C_LONG, &update_rule, 0, &ur_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 11, SQL_C_LONG, &delete_rule, 0, &dr_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLBindCol(hstmt1, 14, SQL_C_CHAR, tgname, sizeof(tgname), &tgname_len);
|
||||||
|
qlog("bind result = %d\n", result);
|
||||||
|
|
||||||
|
result = SQLFetch(hstmt1);
|
||||||
|
qlog("SQLFetch result = %d\n", result);
|
||||||
|
while (result != SQL_NO_DATA_FOUND) {
|
||||||
|
qlog("fetch on stmt1: result = %d, pktab='%s', pkcol='%s', fktab='%s', fkcol='%s', seq=%d, update_rule=%d, ur_len=%d, delete_rule=%d, dr_len=%d, tgname='%s', tgname_len=%d\n",
|
||||||
|
result, pktab, pkcol, fktab, fkcol, seq, update_rule, ur_len, delete_rule, dr_len, tgname, tgname_len);
|
||||||
|
|
||||||
|
result = SQLFetch(hstmt1);
|
||||||
|
}
|
||||||
|
qlog("SQLFetch result = %d\n", result);
|
||||||
|
|
||||||
SQLFreeStmt(hstmt1, SQL_DROP);
|
SQLFreeStmt(hstmt1, SQL_DROP);
|
||||||
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
#define __CONNECTION_H__
|
#define __CONNECTION_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -163,6 +163,14 @@ struct col_info {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Translation DLL entry points */
|
/* Translation DLL entry points */
|
||||||
|
#ifdef WIN32
|
||||||
|
#define DLLHANDLE HINSTANCE
|
||||||
|
#else
|
||||||
|
#define WINAPI CALLBACK
|
||||||
|
#define DLLHANDLE void *
|
||||||
|
#define HINSTANCE void *
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef BOOL (FAR WINAPI *DataSourceToDriverProc) (UDWORD,
|
typedef BOOL (FAR WINAPI *DataSourceToDriverProc) (UDWORD,
|
||||||
SWORD,
|
SWORD,
|
||||||
PTR,
|
PTR,
|
||||||
@ -222,7 +230,7 @@ struct ConnectionClass_ {
|
|||||||
|
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
ConnectionClass *CC_Constructor();
|
ConnectionClass *CC_Constructor(void);
|
||||||
char CC_Destructor(ConnectionClass *self);
|
char CC_Destructor(ConnectionClass *self);
|
||||||
int CC_cursor_count(ConnectionClass *self);
|
int CC_cursor_count(ConnectionClass *self);
|
||||||
char CC_cleanup(ConnectionClass *self);
|
char CC_cleanup(ConnectionClass *self);
|
||||||
|
@ -17,13 +17,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -42,8 +43,8 @@
|
|||||||
#include "lobj.h"
|
#include "lobj.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#if !HAVE_STRICMP
|
#ifndef HAVE_STRICMP
|
||||||
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
||||||
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
||||||
#endif
|
#endif
|
||||||
@ -69,6 +70,10 @@ char *mapFuncs[][2] = {
|
|||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
char *mapFunction(char *func);
|
||||||
|
unsigned int conv_from_octal(unsigned char *s);
|
||||||
|
unsigned int conv_from_hex(unsigned char *s);
|
||||||
|
char *conv_to_octal(unsigned char val);
|
||||||
|
|
||||||
/******** A Guide for date/time/timestamp conversions **************
|
/******** A Guide for date/time/timestamp conversions **************
|
||||||
|
|
||||||
@ -126,6 +131,7 @@ struct tm *tim;
|
|||||||
return COPY_OK;
|
return COPY_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (stmt->hdbc->DataSourceToDriver != NULL) {
|
if (stmt->hdbc->DataSourceToDriver != NULL) {
|
||||||
int length = strlen (value);
|
int length = strlen (value);
|
||||||
stmt->hdbc->DataSourceToDriver (stmt->hdbc->translation_option,
|
stmt->hdbc->DataSourceToDriver (stmt->hdbc->translation_option,
|
||||||
@ -135,6 +141,7 @@ struct tm *tim;
|
|||||||
NULL, 0, NULL);
|
NULL, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
First convert any specific postgres types into more
|
First convert any specific postgres types into more
|
||||||
useable data.
|
useable data.
|
||||||
@ -393,6 +400,7 @@ struct tm *tim;
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* This function inserts parameters into an SQL statements.
|
/* This function inserts parameters into an SQL statements.
|
||||||
It will also modify a SELECT statement for use with declare/fetch cursors.
|
It will also modify a SELECT statement for use with declare/fetch cursors.
|
||||||
This function no longer does any dynamic memory allocation!
|
This function no longer does any dynamic memory allocation!
|
||||||
@ -400,7 +408,7 @@ struct tm *tim;
|
|||||||
int
|
int
|
||||||
copy_statement_with_parameters(StatementClass *stmt)
|
copy_statement_with_parameters(StatementClass *stmt)
|
||||||
{
|
{
|
||||||
char *func="copy_statement_with_parameters";
|
static char *func="copy_statement_with_parameters";
|
||||||
unsigned int opos, npos;
|
unsigned int opos, npos;
|
||||||
char param_string[128], tmp[256], cbuf[TEXT_FIELD_SIZE+5];
|
char param_string[128], tmp[256], cbuf[TEXT_FIELD_SIZE+5];
|
||||||
int param_number;
|
int param_number;
|
||||||
@ -431,7 +439,7 @@ char in_quote = FALSE;
|
|||||||
|
|
||||||
/* If the application hasn't set a cursor name, then generate one */
|
/* If the application hasn't set a cursor name, then generate one */
|
||||||
if ( stmt->cursor_name[0] == '\0')
|
if ( stmt->cursor_name[0] == '\0')
|
||||||
sprintf(stmt->cursor_name, "SQL_CUR%u", stmt);
|
sprintf(stmt->cursor_name, "SQL_CUR%p", stmt);
|
||||||
|
|
||||||
// For selects, prepend a declare cursor to the statement
|
// For selects, prepend a declare cursor to the statement
|
||||||
if (stmt->statement_type == STMT_TYPE_SELECT && globals.use_declarefetch) {
|
if (stmt->statement_type == STMT_TYPE_SELECT && globals.use_declarefetch) {
|
||||||
@ -533,9 +541,7 @@ char in_quote = FALSE;
|
|||||||
param_ctype = stmt->parameters[param_number].CType;
|
param_ctype = stmt->parameters[param_number].CType;
|
||||||
param_sqltype = stmt->parameters[param_number].SQLType;
|
param_sqltype = stmt->parameters[param_number].SQLType;
|
||||||
|
|
||||||
mylog("copy_statement_with_params: from(fcType)=%d, to(fSqlType)=%d\n",
|
mylog("copy_statement_with_params: from(fcType)=%d, to(fSqlType)=%d\n", param_ctype, param_sqltype);
|
||||||
param_ctype,
|
|
||||||
param_sqltype);
|
|
||||||
|
|
||||||
// replace DEFAULT with something we can use
|
// replace DEFAULT with something we can use
|
||||||
if(param_ctype == SQL_C_DEFAULT)
|
if(param_ctype == SQL_C_DEFAULT)
|
||||||
@ -630,8 +636,7 @@ char in_quote = FALSE;
|
|||||||
st.mm = tss->minute;
|
st.mm = tss->minute;
|
||||||
st.ss = tss->second;
|
st.ss = tss->second;
|
||||||
|
|
||||||
mylog("m=%d,d=%d,y=%d,hh=%d,mm=%d,ss=%d\n",
|
mylog("m=%d,d=%d,y=%d,hh=%d,mm=%d,ss=%d\n", st.m, st.d, st.y, st.hh, st.mm, st.ss);
|
||||||
st.m, st.d, st.y, st.hh, st.mm, st.ss);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -769,6 +774,7 @@ char in_quote = FALSE;
|
|||||||
// make sure new_statement is always null-terminated
|
// make sure new_statement is always null-terminated
|
||||||
new_statement[npos] = '\0';
|
new_statement[npos] = '\0';
|
||||||
|
|
||||||
|
|
||||||
if(stmt->hdbc->DriverToDataSource != NULL) {
|
if(stmt->hdbc->DriverToDataSource != NULL) {
|
||||||
int length = strlen (new_statement);
|
int length = strlen (new_statement);
|
||||||
stmt->hdbc->DriverToDataSource (stmt->hdbc->translation_option,
|
stmt->hdbc->DriverToDataSource (stmt->hdbc->translation_option,
|
||||||
@ -778,6 +784,7 @@ char in_quote = FALSE;
|
|||||||
NULL, 0, NULL);
|
NULL, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -975,6 +982,9 @@ char *p;
|
|||||||
int
|
int
|
||||||
convert_pgbinary_to_char(char *value, char *rgbValue, int cbValueMax)
|
convert_pgbinary_to_char(char *value, char *rgbValue, int cbValueMax)
|
||||||
{
|
{
|
||||||
|
mylog("convert_pgbinary_to_char: value = '%s'\n", value);
|
||||||
|
|
||||||
|
strncpy_null(rgbValue, value, cbValueMax);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1029,6 +1039,9 @@ int o=0;
|
|||||||
mylog("convert_from_pgbinary: i=%d, rgbValue[%d] = %d, %c\n", i, o, rgbValue[o], rgbValue[o]);
|
mylog("convert_from_pgbinary: i=%d, rgbValue[%d] = %d, %c\n", i, o, rgbValue[o], rgbValue[o]);
|
||||||
o++;
|
o++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rgbValue[o] = '\0';
|
||||||
|
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1148,13 +1161,16 @@ int retval;
|
|||||||
stmt->lobj_fd = lo_open(stmt->hdbc, oid, INV_READ);
|
stmt->lobj_fd = lo_open(stmt->hdbc, oid, INV_READ);
|
||||||
if (stmt->lobj_fd < 0) {
|
if (stmt->lobj_fd < 0) {
|
||||||
stmt->errornumber = STMT_EXEC_ERROR;
|
stmt->errornumber = STMT_EXEC_ERROR;
|
||||||
stmt->errormsg = "Couldnt open large object for writing.";
|
stmt->errormsg = "Couldnt open large object for reading.";
|
||||||
return COPY_GENERAL_ERROR;
|
return COPY_GENERAL_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stmt->lobj_fd < 0)
|
if (stmt->lobj_fd < 0) {
|
||||||
return COPY_NO_DATA_FOUND;
|
stmt->errornumber = STMT_EXEC_ERROR;
|
||||||
|
stmt->errormsg = "Large object FD undefined for multiple read.";
|
||||||
|
return COPY_GENERAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
retval = lo_read(stmt->hdbc, stmt->lobj_fd, rgbValue, cbValueMax);
|
retval = lo_read(stmt->hdbc, stmt->lobj_fd, rgbValue, cbValueMax);
|
||||||
if (retval < 0) {
|
if (retval < 0) {
|
||||||
|
@ -17,15 +17,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "gpps.h"
|
#include "gpps.h"
|
||||||
#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
|
#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
|
||||||
#define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d)
|
#define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d)
|
||||||
#if !HAVE_STRICMP
|
#ifndef HAVE_STRICMP
|
||||||
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
||||||
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
||||||
#endif
|
#endif
|
||||||
@ -34,9 +34,19 @@
|
|||||||
#include "dlg_specific.h"
|
#include "dlg_specific.h"
|
||||||
#include "convert.h"
|
#include "convert.h"
|
||||||
|
|
||||||
|
#ifndef BOOL
|
||||||
|
#define BOOL int
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE (BOOL)0
|
||||||
|
#endif
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE (BOOL)1
|
||||||
|
#endif
|
||||||
|
|
||||||
extern GLOBAL_VALUES globals;
|
extern GLOBAL_VALUES globals;
|
||||||
|
|
||||||
#ifndef UNIX /* best to find a #ifdef for WINDOWS */
|
#ifdef WIN32
|
||||||
void
|
void
|
||||||
SetDlgStuff(HWND hdlg, ConnInfo *ci)
|
SetDlgStuff(HWND hdlg, ConnInfo *ci)
|
||||||
{
|
{
|
||||||
@ -291,7 +301,7 @@ char buf[128];
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !UNIX */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
void
|
void
|
||||||
makeConnectString(char *connect_string, ConnInfo *ci)
|
makeConnectString(char *connect_string, ConnInfo *ci)
|
||||||
@ -371,16 +381,7 @@ copyAttributes(ConnInfo *ci, char *attribute, char *value)
|
|||||||
// strcpy(ci->conn_settings, value);
|
// strcpy(ci->conn_settings, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',readonly='%s',protocol='%s', conn_settings='%s')\n",
|
mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',readonly='%s',protocol='%s', conn_settings='%s')\n", ci->dsn, ci->server,ci->database,ci->username,ci->password,ci->port,ci->readonly,ci->protocol,ci->conn_settings);
|
||||||
ci->dsn,
|
|
||||||
ci->server,
|
|
||||||
ci->database,
|
|
||||||
ci->username,
|
|
||||||
ci->password,
|
|
||||||
ci->port,
|
|
||||||
ci->readonly,
|
|
||||||
ci->protocol,
|
|
||||||
ci->conn_settings);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -422,6 +423,9 @@ char encoded_conn_settings[LARGE_REGISTRY_LEN];
|
|||||||
strcpy(DSN, INI_DSN);
|
strcpy(DSN, INI_DSN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// brute-force chop off trailing blanks...
|
||||||
|
while (*(DSN+strlen(DSN)-1) == ' ') *(DSN+strlen(DSN)-1) = '\0';
|
||||||
|
|
||||||
// Proceed with getting info for the given DSN.
|
// Proceed with getting info for the given DSN.
|
||||||
|
|
||||||
if ( ci->desc[0] == '\0' || overwrite)
|
if ( ci->desc[0] == '\0' || overwrite)
|
||||||
@ -471,6 +475,11 @@ char encoded_conn_settings[LARGE_REGISTRY_LEN];
|
|||||||
if ( ci->translation_option[0] == '\0' || overwrite)
|
if ( ci->translation_option[0] == '\0' || overwrite)
|
||||||
SQLGetPrivateProfileString(DSN, INI_TRANSLATIONOPTION, "", ci->translation_option, sizeof(ci->translation_option), ODBC_INI);
|
SQLGetPrivateProfileString(DSN, INI_TRANSLATIONOPTION, "", ci->translation_option, sizeof(ci->translation_option), ODBC_INI);
|
||||||
|
|
||||||
|
|
||||||
|
/* Allow override of odbcinst.ini parameters here */
|
||||||
|
getGlobalDefaults(DSN, ODBC_INI, TRUE);
|
||||||
|
|
||||||
|
|
||||||
qlog("DSN info: DSN='%s',server='%s',port='%s',dbase='%s',user='%s',passwd='%s'\n",
|
qlog("DSN info: DSN='%s',server='%s',port='%s',dbase='%s',user='%s',passwd='%s'\n",
|
||||||
DSN,
|
DSN,
|
||||||
ci->server,
|
ci->server,
|
||||||
@ -572,165 +581,172 @@ char encoded_conn_settings[LARGE_REGISTRY_LEN];
|
|||||||
/* This function reads the ODBCINST.INI portion of
|
/* This function reads the ODBCINST.INI portion of
|
||||||
the registry and gets any driver defaults.
|
the registry and gets any driver defaults.
|
||||||
*/
|
*/
|
||||||
void getGlobalDefaults(void)
|
void getGlobalDefaults(char *section, char *filename, char override)
|
||||||
{
|
{
|
||||||
char temp[128];
|
char temp[256];
|
||||||
|
|
||||||
|
|
||||||
// Fetch Count is stored in driver section
|
// Fetch Count is stored in driver section
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_FETCH, "",
|
SQLGetPrivateProfileString(section, INI_FETCH, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] ) {
|
if ( temp[0] ) {
|
||||||
globals.fetch_max = atoi(temp);
|
globals.fetch_max = atoi(temp);
|
||||||
/* sanity check if using cursors */
|
/* sanity check if using cursors */
|
||||||
if (globals.fetch_max <= 0)
|
if (globals.fetch_max <= 0)
|
||||||
globals.fetch_max = FETCH_MAX;
|
globals.fetch_max = FETCH_MAX;
|
||||||
}
|
}
|
||||||
|
else if ( ! override)
|
||||||
else
|
|
||||||
globals.fetch_max = FETCH_MAX;
|
globals.fetch_max = FETCH_MAX;
|
||||||
|
|
||||||
|
|
||||||
// Socket Buffersize is stored in driver section
|
// Socket Buffersize is stored in driver section
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_SOCKET, "",
|
SQLGetPrivateProfileString(section, INI_SOCKET, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] )
|
if ( temp[0] )
|
||||||
globals.socket_buffersize = atoi(temp);
|
globals.socket_buffersize = atoi(temp);
|
||||||
else
|
else if ( ! override)
|
||||||
globals.socket_buffersize = SOCK_BUFFER_SIZE;
|
globals.socket_buffersize = SOCK_BUFFER_SIZE;
|
||||||
|
|
||||||
|
|
||||||
// Debug is stored in the driver section
|
// Debug is stored in the driver section
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_DEBUG, "0",
|
SQLGetPrivateProfileString(section, INI_DEBUG, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
globals.debug = atoi(temp);
|
if ( temp[0] )
|
||||||
|
globals.debug = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.debug = DEFAULT_DEBUG;
|
||||||
|
|
||||||
|
|
||||||
// CommLog is stored in the driver section
|
// CommLog is stored in the driver section
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_COMMLOG, "",
|
SQLGetPrivateProfileString(section, INI_COMMLOG, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.commlog = DEFAULT_COMMLOG;
|
|
||||||
else
|
|
||||||
globals.commlog = atoi(temp);
|
globals.commlog = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.commlog = DEFAULT_COMMLOG;
|
||||||
|
|
||||||
|
|
||||||
// Optimizer is stored in the driver section only
|
// Optimizer is stored in the driver section only
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_OPTIMIZER, "",
|
SQLGetPrivateProfileString(section, INI_OPTIMIZER, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.disable_optimizer = DEFAULT_OPTIMIZER;
|
|
||||||
else
|
|
||||||
globals.disable_optimizer = atoi(temp);
|
globals.disable_optimizer = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.disable_optimizer = DEFAULT_OPTIMIZER;
|
||||||
|
|
||||||
|
|
||||||
// Recognize Unique Index is stored in the driver section only
|
// Recognize Unique Index is stored in the driver section only
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_UNIQUEINDEX, "",
|
SQLGetPrivateProfileString(section, INI_UNIQUEINDEX, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.unique_index = DEFAULT_UNIQUEINDEX;
|
|
||||||
else
|
|
||||||
globals.unique_index = atoi(temp);
|
globals.unique_index = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.unique_index = DEFAULT_UNIQUEINDEX;
|
||||||
|
|
||||||
|
|
||||||
// Unknown Sizes is stored in the driver section only
|
// Unknown Sizes is stored in the driver section only
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_UNKNOWNSIZES, "",
|
SQLGetPrivateProfileString(section, INI_UNKNOWNSIZES, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.unknown_sizes = DEFAULT_UNKNOWNSIZES;
|
|
||||||
else
|
|
||||||
globals.unknown_sizes = atoi(temp);
|
globals.unknown_sizes = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.unknown_sizes = DEFAULT_UNKNOWNSIZES;
|
||||||
|
|
||||||
|
|
||||||
// Lie about supported functions?
|
// Lie about supported functions?
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_LIE, "",
|
SQLGetPrivateProfileString(section, INI_LIE, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.lie = DEFAULT_LIE;
|
|
||||||
else
|
|
||||||
globals.lie = atoi(temp);
|
globals.lie = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.lie = DEFAULT_LIE;
|
||||||
|
|
||||||
// Parse statements
|
// Parse statements
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_PARSE, "",
|
SQLGetPrivateProfileString(section, INI_PARSE, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.parse = DEFAULT_PARSE;
|
|
||||||
else
|
|
||||||
globals.parse = atoi(temp);
|
globals.parse = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.parse = DEFAULT_PARSE;
|
||||||
|
|
||||||
// Readonly is stored in the driver section AND per datasource
|
// Readonly is stored in the driver section AND per datasource
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_READONLY, "",
|
SQLGetPrivateProfileString(section, INI_READONLY, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.readonly = DEFAULT_READONLY;
|
|
||||||
else
|
|
||||||
globals.readonly = atoi(temp);
|
globals.readonly = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.readonly = DEFAULT_READONLY;
|
||||||
|
|
||||||
|
|
||||||
// UseDeclareFetch is stored in the driver section only
|
// UseDeclareFetch is stored in the driver section only
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_USEDECLAREFETCH, "",
|
SQLGetPrivateProfileString(section, INI_USEDECLAREFETCH, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.use_declarefetch = DEFAULT_USEDECLAREFETCH;
|
|
||||||
else
|
|
||||||
globals.use_declarefetch = atoi(temp);
|
globals.use_declarefetch = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.use_declarefetch = DEFAULT_USEDECLAREFETCH;
|
||||||
|
|
||||||
|
|
||||||
// Max Varchar Size
|
// Max Varchar Size
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_MAXVARCHARSIZE, "",
|
SQLGetPrivateProfileString(section, INI_MAXVARCHARSIZE, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.max_varchar_size = MAX_VARCHAR_SIZE;
|
|
||||||
else
|
|
||||||
globals.max_varchar_size = atoi(temp);
|
globals.max_varchar_size = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.max_varchar_size = MAX_VARCHAR_SIZE;
|
||||||
|
|
||||||
// Max TextField Size
|
// Max TextField Size
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_MAXLONGVARCHARSIZE, "",
|
SQLGetPrivateProfileString(section, INI_MAXLONGVARCHARSIZE, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.max_longvarchar_size = TEXT_FIELD_SIZE;
|
|
||||||
else
|
|
||||||
globals.max_longvarchar_size = atoi(temp);
|
globals.max_longvarchar_size = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.max_longvarchar_size = TEXT_FIELD_SIZE;
|
||||||
|
|
||||||
// Text As LongVarchar
|
// Text As LongVarchar
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_TEXTASLONGVARCHAR, "",
|
SQLGetPrivateProfileString(section, INI_TEXTASLONGVARCHAR, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.text_as_longvarchar = DEFAULT_TEXTASLONGVARCHAR;
|
|
||||||
else
|
|
||||||
globals.text_as_longvarchar = atoi(temp);
|
globals.text_as_longvarchar = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.text_as_longvarchar = DEFAULT_TEXTASLONGVARCHAR;
|
||||||
|
|
||||||
// Unknowns As LongVarchar
|
// Unknowns As LongVarchar
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_UNKNOWNSASLONGVARCHAR, "",
|
SQLGetPrivateProfileString(section, INI_UNKNOWNSASLONGVARCHAR, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.unknowns_as_longvarchar = DEFAULT_UNKNOWNSASLONGVARCHAR;
|
|
||||||
else
|
|
||||||
globals.unknowns_as_longvarchar = atoi(temp);
|
globals.unknowns_as_longvarchar = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.unknowns_as_longvarchar = DEFAULT_UNKNOWNSASLONGVARCHAR;
|
||||||
|
|
||||||
// Bools As Char
|
// Bools As Char
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_BOOLSASCHAR, "",
|
SQLGetPrivateProfileString(section, INI_BOOLSASCHAR, "",
|
||||||
temp, sizeof(temp), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( temp[0] == '\0')
|
if ( temp[0] )
|
||||||
globals.bools_as_char = DEFAULT_BOOLSASCHAR;
|
|
||||||
else
|
|
||||||
globals.bools_as_char = atoi(temp);
|
globals.bools_as_char = atoi(temp);
|
||||||
|
else if ( ! override)
|
||||||
|
globals.bools_as_char = DEFAULT_BOOLSASCHAR;
|
||||||
|
|
||||||
|
// Extra Systable prefixes
|
||||||
// Extra System Table prefixes
|
// Use @@@ to distinguish between blank extra prefixes and no key entry
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_EXTRASYSTABLEPREFIXES, "@@@",
|
SQLGetPrivateProfileString(section, INI_EXTRASYSTABLEPREFIXES, "@@@",
|
||||||
globals.extra_systable_prefixes, sizeof(globals.extra_systable_prefixes), ODBCINST_INI);
|
temp, sizeof(temp), filename);
|
||||||
if ( ! strcmp(globals.extra_systable_prefixes, "@@@")) {
|
if ( strcmp(temp, "@@@" ))
|
||||||
|
strcpy(globals.extra_systable_prefixes, temp);
|
||||||
|
else if ( ! override)
|
||||||
strcpy(globals.extra_systable_prefixes, DEFAULT_EXTRASYSTABLEPREFIXES);
|
strcpy(globals.extra_systable_prefixes, DEFAULT_EXTRASYSTABLEPREFIXES);
|
||||||
}
|
|
||||||
mylog("globals.extra_systable_prefixes = '%s'\n", globals.extra_systable_prefixes);
|
mylog("globals.extra_systable_prefixes = '%s'\n", globals.extra_systable_prefixes);
|
||||||
|
|
||||||
|
|
||||||
// ConnSettings is stored in the driver section and per datasource for override
|
// Dont allow override of an override!
|
||||||
SQLGetPrivateProfileString(DBMS_NAME, INI_CONNSETTINGS, "",
|
if ( ! override) {
|
||||||
globals.conn_settings, sizeof(globals.conn_settings), ODBCINST_INI);
|
|
||||||
|
|
||||||
|
// ConnSettings is stored in the driver section and per datasource for override
|
||||||
|
SQLGetPrivateProfileString(section, INI_CONNSETTINGS, "",
|
||||||
|
globals.conn_settings, sizeof(globals.conn_settings), filename);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
#define __DLG_SPECIFIC_H__
|
#define __DLG_SPECIFIC_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
|
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <windowsx.h>
|
#include <windowsx.h>
|
||||||
#include <odbcinst.h>
|
#include <odbcinst.h>
|
||||||
@ -30,13 +30,20 @@
|
|||||||
#define UNKNOWNS_AS_LONGEST 2
|
#define UNKNOWNS_AS_LONGEST 2
|
||||||
|
|
||||||
/* INI File Stuff */
|
/* INI File Stuff */
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#define ODBC_INI ".odbc.ini"
|
#define ODBC_INI ".odbc.ini"
|
||||||
#define ODBCINST_INI "/etc/odbcinst.ini"
|
#ifdef ODBCINST
|
||||||
|
#define xstr(s) str(s)
|
||||||
|
#define str(s) #s
|
||||||
|
#define ODBCINST_INI xstr(ODBCINST) "/odbcinst.ini"
|
||||||
#else
|
#else
|
||||||
#define ODBC_INI "ODBC.INI" /* ODBC initialization file */
|
#define ODBCINST_INI "/etc/odbcinst.ini"
|
||||||
#define ODBCINST_INI "ODBCINST.INI" /* ODBC Installation file */
|
|
||||||
#endif
|
#endif
|
||||||
|
#else
|
||||||
|
#define ODBC_INI "ODBC.INI" /* ODBC initialization file */
|
||||||
|
#define ODBCINST_INI "ODBCINST.INI" /* ODBC Installation file */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define INI_DSN DBMS_NAME /* Name of default Datasource in ini file (not used?) */
|
#define INI_DSN DBMS_NAME /* Name of default Datasource in ini file (not used?) */
|
||||||
#define INI_KDESC "Description" /* Data source description */
|
#define INI_KDESC "Description" /* Data source description */
|
||||||
@ -81,13 +88,14 @@
|
|||||||
/* Connection Defaults */
|
/* Connection Defaults */
|
||||||
#define DEFAULT_PORT "5432"
|
#define DEFAULT_PORT "5432"
|
||||||
#define DEFAULT_READONLY 1
|
#define DEFAULT_READONLY 1
|
||||||
#define DEFAULT_USEDECLAREFETCH 1
|
#define DEFAULT_USEDECLAREFETCH 0
|
||||||
#define DEFAULT_TEXTASLONGVARCHAR 1
|
#define DEFAULT_TEXTASLONGVARCHAR 1
|
||||||
#define DEFAULT_UNKNOWNSASLONGVARCHAR 0
|
#define DEFAULT_UNKNOWNSASLONGVARCHAR 0
|
||||||
#define DEFAULT_BOOLSASCHAR 1
|
#define DEFAULT_BOOLSASCHAR 1
|
||||||
#define DEFAULT_OPTIMIZER 1 // disable
|
#define DEFAULT_OPTIMIZER 1 // disable
|
||||||
#define DEFAULT_UNIQUEINDEX 0 // dont recognize
|
#define DEFAULT_UNIQUEINDEX 0 // dont recognize
|
||||||
#define DEFAULT_COMMLOG 0 // dont log
|
#define DEFAULT_COMMLOG 0 // dont log
|
||||||
|
#define DEFAULT_DEBUG 0
|
||||||
#define DEFAULT_UNKNOWNSIZES UNKNOWNS_AS_MAX
|
#define DEFAULT_UNKNOWNSIZES UNKNOWNS_AS_MAX
|
||||||
|
|
||||||
|
|
||||||
@ -101,9 +109,9 @@
|
|||||||
#define DEFAULT_EXTRASYSTABLEPREFIXES "dd_;"
|
#define DEFAULT_EXTRASYSTABLEPREFIXES "dd_;"
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
void getGlobalDefaults(void);
|
void getGlobalDefaults(char *section, char *filename, char override);
|
||||||
|
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
void SetDlgStuff(HWND hdlg, ConnInfo *ci);
|
void SetDlgStuff(HWND hdlg, ConnInfo *ci);
|
||||||
void GetDlgStuff(HWND hdlg, ConnInfo *ci);
|
void GetDlgStuff(HWND hdlg, ConnInfo *ci);
|
||||||
|
|
||||||
@ -115,7 +123,7 @@ int CALLBACK ds_optionsProc(HWND hdlg,
|
|||||||
WORD wMsg,
|
WORD wMsg,
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam);
|
LPARAM lParam);
|
||||||
#endif /* ! UNIX */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
void updateGlobals(void);
|
void updateGlobals(void);
|
||||||
void writeDSNinfo(ConnInfo *ci);
|
void writeDSNinfo(ConnInfo *ci);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -22,7 +22,7 @@
|
|||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#define NEAR
|
#define NEAR
|
||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
||||||
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
||||||
#else
|
#else
|
||||||
@ -55,7 +55,7 @@
|
|||||||
/* prototypes */
|
/* prototypes */
|
||||||
void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci);
|
void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci);
|
||||||
|
|
||||||
#ifndef UNIX /* should be something like ifdef WINDOWS */
|
#ifdef WIN32
|
||||||
BOOL FAR PASCAL dconn_FDriverConnectProc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
|
BOOL FAR PASCAL dconn_FDriverConnectProc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
|
||||||
RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci);
|
RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci);
|
||||||
|
|
||||||
@ -75,15 +75,19 @@ RETCODE SQL_API SQLDriverConnect(
|
|||||||
SWORD FAR *pcbConnStrOut,
|
SWORD FAR *pcbConnStrOut,
|
||||||
UWORD fDriverCompletion)
|
UWORD fDriverCompletion)
|
||||||
{
|
{
|
||||||
char *func = "SQLDriverConnect";
|
static char *func = "SQLDriverConnect";
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
ConnInfo *ci;
|
ConnInfo *ci;
|
||||||
|
#ifdef WIN32
|
||||||
RETCODE dialog_result;
|
RETCODE dialog_result;
|
||||||
|
#endif
|
||||||
char connStrIn[MAX_CONNECT_STRING];
|
char connStrIn[MAX_CONNECT_STRING];
|
||||||
char connStrOut[MAX_CONNECT_STRING];
|
char connStrOut[MAX_CONNECT_STRING];
|
||||||
int retval;
|
int retval;
|
||||||
char password_required = FALSE;
|
char password_required = FALSE;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! conn) {
|
if ( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -107,11 +111,13 @@ char password_required = FALSE;
|
|||||||
// Fill in any default parameters if they are not there.
|
// Fill in any default parameters if they are not there.
|
||||||
getDSNdefaults(ci);
|
getDSNdefaults(ci);
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
dialog:
|
dialog:
|
||||||
|
#endif
|
||||||
ci->focus_password = password_required;
|
ci->focus_password = password_required;
|
||||||
|
|
||||||
switch(fDriverCompletion) {
|
switch(fDriverCompletion) {
|
||||||
#ifndef UNIX /* again should be ifdef WINDOWS like */
|
#ifdef WIN32
|
||||||
case SQL_DRIVER_PROMPT:
|
case SQL_DRIVER_PROMPT:
|
||||||
dialog_result = dconn_DoDialog(hwnd, ci);
|
dialog_result = dconn_DoDialog(hwnd, ci);
|
||||||
if(dialog_result != SQL_SUCCESS) {
|
if(dialog_result != SQL_SUCCESS) {
|
||||||
@ -185,7 +191,7 @@ dialog:
|
|||||||
return SQL_ERROR; /* need a password but not allowed to prompt so error */
|
return SQL_ERROR; /* need a password but not allowed to prompt so error */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
password_required = TRUE;
|
password_required = TRUE;
|
||||||
goto dialog;
|
goto dialog;
|
||||||
#else
|
#else
|
||||||
@ -203,7 +209,7 @@ dialog:
|
|||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef UNIX /* yet another candidate for ifdef WINDOWS */
|
#ifdef WIN32
|
||||||
RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci)
|
RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci)
|
||||||
{
|
{
|
||||||
int dialog_result;
|
int dialog_result;
|
||||||
@ -299,7 +305,7 @@ ConnInfo *ci;
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ! UNIX */
|
#endif /* WIN32 */
|
||||||
|
|
||||||
void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci)
|
void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci)
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@ ConnectionClass *conns[MAX_CONNECTIONS];
|
|||||||
|
|
||||||
RETCODE SQL_API SQLAllocEnv(HENV FAR *phenv)
|
RETCODE SQL_API SQLAllocEnv(HENV FAR *phenv)
|
||||||
{
|
{
|
||||||
char *func = "SQLAllocEnv";
|
static char *func = "SQLAllocEnv";
|
||||||
|
|
||||||
mylog("**** in SQLAllocEnv ** \n");
|
mylog("**** in SQLAllocEnv ** \n");
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ mylog("**** in SQLAllocEnv ** \n");
|
|||||||
|
|
||||||
RETCODE SQL_API SQLFreeEnv(HENV henv)
|
RETCODE SQL_API SQLFreeEnv(HENV henv)
|
||||||
{
|
{
|
||||||
char *func = "SQLFreeEnv";
|
static char *func = "SQLFreeEnv";
|
||||||
EnvironmentClass *env = (EnvironmentClass *) henv;
|
EnvironmentClass *env = (EnvironmentClass *) henv;
|
||||||
|
|
||||||
mylog("**** in SQLFreeEnv: env = %u ** \n", env);
|
mylog("**** in SQLFreeEnv: env = %u ** \n", env);
|
||||||
@ -403,8 +403,7 @@ mylog("EN_add_connection: self = %u, conn = %u\n", self, conn);
|
|||||||
conn->henv = self;
|
conn->henv = self;
|
||||||
conns[i] = conn;
|
conns[i] = conn;
|
||||||
|
|
||||||
mylog(" added at i =%d, conn->henv = %u, conns[i]->henv = %u\n",
|
mylog(" added at i =%d, conn->henv = %u, conns[i]->henv = %u\n", i, conn->henv, conns[i]->henv);
|
||||||
i, conn->henv, conns[i]->henv);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,12 @@
|
|||||||
#define __ENVIRON_H__
|
#define __ENVIRON_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
|
@ -14,14 +14,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
#else
|
#else
|
||||||
@ -37,23 +37,16 @@
|
|||||||
#include "lobj.h"
|
#include "lobj.h"
|
||||||
|
|
||||||
|
|
||||||
RETCODE SQL_API SQLExecDirect(
|
|
||||||
HSTMT hstmt,
|
|
||||||
UCHAR FAR *szSqlStr,
|
|
||||||
SDWORD cbSqlStr)
|
|
||||||
{
|
|
||||||
return _SQLExecDirect(hstmt, szSqlStr, cbSqlStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Perform a Prepare on the SQL statement
|
// Perform a Prepare on the SQL statement
|
||||||
RETCODE SQL_API SQLPrepare(HSTMT hstmt,
|
RETCODE SQL_API SQLPrepare(HSTMT hstmt,
|
||||||
UCHAR FAR *szSqlStr,
|
UCHAR FAR *szSqlStr,
|
||||||
SDWORD cbSqlStr)
|
SDWORD cbSqlStr)
|
||||||
{
|
{
|
||||||
char *func = "SQLPrepare";
|
static char *func = "SQLPrepare";
|
||||||
StatementClass *self = (StatementClass *) hstmt;
|
StatementClass *self = (StatementClass *) hstmt;
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! self) {
|
if ( ! self) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -130,13 +123,16 @@ StatementClass *self = (StatementClass *) hstmt;
|
|||||||
|
|
||||||
// Performs the equivalent of SQLPrepare, followed by SQLExecute.
|
// Performs the equivalent of SQLPrepare, followed by SQLExecute.
|
||||||
|
|
||||||
RETCODE SQL_API _SQLExecDirect(
|
RETCODE SQL_API SQLExecDirect(
|
||||||
HSTMT hstmt,
|
HSTMT hstmt,
|
||||||
UCHAR FAR *szSqlStr,
|
UCHAR FAR *szSqlStr,
|
||||||
SDWORD cbSqlStr)
|
SDWORD cbSqlStr)
|
||||||
{
|
{
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char *func = "SQLExecDirect";
|
RETCODE SQL_API result;
|
||||||
|
static char *func = "SQLExecDirect";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -156,7 +152,7 @@ char *func = "SQLExecDirect";
|
|||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("**** SQLExecDirect: hstmt=%u, statement='%s'\n", hstmt, stmt->statement);
|
mylog("**** %s: hstmt=%u, statement='%s'\n", func, hstmt, stmt->statement);
|
||||||
|
|
||||||
stmt->prepare = FALSE;
|
stmt->prepare = FALSE;
|
||||||
stmt->statement_type = statement_type(stmt->statement);
|
stmt->statement_type = statement_type(stmt->statement);
|
||||||
@ -169,23 +165,29 @@ char *func = "SQLExecDirect";
|
|||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("SQLExecDirect: calling SQLExecute\n");
|
mylog("%s: calling SQLExecute...\n", func);
|
||||||
|
|
||||||
return SQLExecute(hstmt);
|
result = SQLExecute(hstmt);
|
||||||
|
|
||||||
|
mylog("%s: returned %hd from SQLExecute\n", func, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute a prepared SQL statement
|
// Execute a prepared SQL statement
|
||||||
RETCODE SQL_API SQLExecute(
|
RETCODE SQL_API SQLExecute(
|
||||||
HSTMT hstmt)
|
HSTMT hstmt)
|
||||||
{
|
{
|
||||||
char *func="SQLExecute";
|
static char *func="SQLExecute";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
ConnectionClass *conn;
|
ConnectionClass *conn;
|
||||||
int i, retval;
|
int i, retval;
|
||||||
|
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
|
mylog("%s: NULL statement so return SQL_INVALID_HANDLE\n", func);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,14 +197,19 @@ int i, retval;
|
|||||||
*/
|
*/
|
||||||
if ( stmt->prepare && stmt->status == STMT_PREMATURE) {
|
if ( stmt->prepare && stmt->status == STMT_PREMATURE) {
|
||||||
stmt->status = STMT_FINISHED;
|
stmt->status = STMT_FINISHED;
|
||||||
if (stmt->errormsg == NULL)
|
if (stmt->errormsg == NULL) {
|
||||||
|
mylog("%s: premature statement but return SQL_SUCCESS\n", func);
|
||||||
return SQL_SUCCESS;
|
return SQL_SUCCESS;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
|
mylog("%s: premature statement so return SQL_ERROR\n", func);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mylog("%s: clear errors...\n", func);
|
||||||
|
|
||||||
SC_clear_error(stmt);
|
SC_clear_error(stmt);
|
||||||
|
|
||||||
conn = SC_get_conn(stmt);
|
conn = SC_get_conn(stmt);
|
||||||
@ -210,6 +217,7 @@ int i, retval;
|
|||||||
stmt->errormsg = "Connection is already in use.";
|
stmt->errormsg = "Connection is already in use.";
|
||||||
stmt->errornumber = STMT_SEQUENCE_ERROR;
|
stmt->errornumber = STMT_SEQUENCE_ERROR;
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
|
mylog("%s: problem with connection\n", func);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,6 +225,7 @@ int i, retval;
|
|||||||
stmt->errornumber = STMT_NO_STMTSTRING;
|
stmt->errornumber = STMT_NO_STMTSTRING;
|
||||||
stmt->errormsg = "This handle does not have a SQL statement stored in it";
|
stmt->errormsg = "This handle does not have a SQL statement stored in it";
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
|
mylog("%s: problem with handle\n", func);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,6 +234,7 @@ int i, retval;
|
|||||||
to SQLFreeStmt(SQL_CLOSE) or SQLCancel.
|
to SQLFreeStmt(SQL_CLOSE) or SQLCancel.
|
||||||
*/
|
*/
|
||||||
if (stmt->status == STMT_FINISHED) {
|
if (stmt->status == STMT_FINISHED) {
|
||||||
|
mylog("%s: recycling statement (should have been done by app)...\n", func);
|
||||||
SC_recycle_statement(stmt);
|
SC_recycle_statement(stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,6 +245,7 @@ int i, retval;
|
|||||||
stmt->errornumber = STMT_STATUS_ERROR;
|
stmt->errornumber = STMT_STATUS_ERROR;
|
||||||
stmt->errormsg = "The handle does not point to a statement that is ready to be executed";
|
stmt->errormsg = "The handle does not point to a statement that is ready to be executed";
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
|
mylog("%s: problem with statement\n", func);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,7 +269,7 @@ int i, retval;
|
|||||||
return SQL_NEED_DATA;
|
return SQL_NEED_DATA;
|
||||||
|
|
||||||
|
|
||||||
mylog("SQLExecute: copying statement params: trans_status=%d, len=%d, stmt='%s'\n", conn->transact_status, strlen(stmt->statement), stmt->statement);
|
mylog("%s: copying statement params: trans_status=%d, len=%d, stmt='%s'\n", func, conn->transact_status, strlen(stmt->statement), stmt->statement);
|
||||||
|
|
||||||
// Create the statement with parameters substituted.
|
// Create the statement with parameters substituted.
|
||||||
retval = copy_statement_with_parameters(stmt);
|
retval = copy_statement_with_parameters(stmt);
|
||||||
@ -282,14 +293,14 @@ RETCODE SQL_API SQLTransact(
|
|||||||
HDBC hdbc,
|
HDBC hdbc,
|
||||||
UWORD fType)
|
UWORD fType)
|
||||||
{
|
{
|
||||||
char *func = "SQLTransact";
|
static char *func = "SQLTransact";
|
||||||
extern ConnectionClass **conns;
|
extern ConnectionClass *conns[];
|
||||||
ConnectionClass *conn;
|
ConnectionClass *conn;
|
||||||
QResultClass *res;
|
QResultClass *res;
|
||||||
char ok, *stmt_string;
|
char ok, *stmt_string;
|
||||||
int lf;
|
int lf;
|
||||||
|
|
||||||
mylog("**** SQLTransact: hdbc=%u, henv=%u\n", hdbc, henv);
|
mylog("entering %s: hdbc=%u, henv=%u\n", func, hdbc, henv);
|
||||||
|
|
||||||
if (hdbc == SQL_NULL_HDBC && henv == SQL_NULL_HENV) {
|
if (hdbc == SQL_NULL_HDBC && henv == SQL_NULL_HENV) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
@ -357,9 +368,11 @@ mylog("**** SQLTransact: hdbc=%u, henv=%u\n", hdbc, henv);
|
|||||||
RETCODE SQL_API SQLCancel(
|
RETCODE SQL_API SQLCancel(
|
||||||
HSTMT hstmt) // Statement to cancel.
|
HSTMT hstmt) // Statement to cancel.
|
||||||
{
|
{
|
||||||
char *func="SQLCancel";
|
static char *func="SQLCancel";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
// Check if this can handle canceling in the middle of a SQLPutData?
|
// Check if this can handle canceling in the middle of a SQLPutData?
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -394,6 +407,9 @@ RETCODE SQL_API SQLNativeSql(
|
|||||||
SDWORD cbSqlStrMax,
|
SDWORD cbSqlStrMax,
|
||||||
SDWORD FAR *pcbSqlStr)
|
SDWORD FAR *pcbSqlStr)
|
||||||
{
|
{
|
||||||
|
static char *func="SQLNativeSql";
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
strncpy_null(szSqlStr, szSqlStrIn, cbSqlStrMax);
|
strncpy_null(szSqlStr, szSqlStrIn, cbSqlStrMax);
|
||||||
|
|
||||||
@ -409,17 +425,18 @@ RETCODE SQL_API SQLParamData(
|
|||||||
HSTMT hstmt,
|
HSTMT hstmt,
|
||||||
PTR FAR *prgbValue)
|
PTR FAR *prgbValue)
|
||||||
{
|
{
|
||||||
char *func = "SQLParamData";
|
static char *func = "SQLParamData";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
int i, retval;
|
int i, retval;
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("SQLParamData, enter: data_at_exec=%d, params_alloc=%d\n",
|
mylog("%s: data_at_exec=%d, params_alloc=%d\n", func, stmt->data_at_exec, stmt->parameters_allocated);
|
||||||
stmt->data_at_exec, stmt->parameters_allocated);
|
|
||||||
|
|
||||||
if (stmt->data_at_exec < 0) {
|
if (stmt->data_at_exec < 0) {
|
||||||
stmt->errornumber = STMT_SEQUENCE_ERROR;
|
stmt->errornumber = STMT_SEQUENCE_ERROR;
|
||||||
@ -482,12 +499,13 @@ RETCODE SQL_API SQLPutData(
|
|||||||
PTR rgbValue,
|
PTR rgbValue,
|
||||||
SDWORD cbValue)
|
SDWORD cbValue)
|
||||||
{
|
{
|
||||||
char *func = "SQLPutData";
|
static char *func = "SQLPutData";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
int old_pos, retval;
|
int old_pos, retval;
|
||||||
ParameterInfoClass *current_param;
|
ParameterInfoClass *current_param;
|
||||||
char *buffer;
|
char *buffer;
|
||||||
|
|
||||||
|
mylog( "%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
|
@ -13,11 +13,12 @@
|
|||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
#if HAVE_CONFIG_H
|
||||||
#include <config.h> // produced by configure
|
#include "config.h" // produced by configure
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#if HAVE_PWD_H
|
#if HAVE_PWD_H
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "gpps.h"
|
#include "gpps.h"
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
#define TRUE ((BOOL)1)
|
#define TRUE ((BOOL)1)
|
||||||
@ -54,6 +56,7 @@ GetPrivateProfileString(char *theSection, // section name
|
|||||||
size_t aLength;
|
size_t aLength;
|
||||||
char aLine[2048];
|
char aLine[2048];
|
||||||
char *aValue;
|
char *aValue;
|
||||||
|
char *aStart;
|
||||||
char *aString;
|
char *aString;
|
||||||
size_t aLineLength;
|
size_t aLineLength;
|
||||||
size_t aReturnLength = 0;
|
size_t aReturnLength = 0;
|
||||||
@ -144,11 +147,15 @@ GetPrivateProfileString(char *theSection, // section name
|
|||||||
|
|
||||||
if( (aString = strchr(aLine, ']')) )
|
if( (aString = strchr(aLine, ']')) )
|
||||||
{
|
{
|
||||||
*aString = '\0';
|
aStart = aLine + 1;
|
||||||
|
aString--;
|
||||||
|
while (isspace(*aStart)) aStart++;
|
||||||
|
while (isspace(*aString)) aString--;
|
||||||
|
*(aString+1) = '\0';
|
||||||
|
|
||||||
// accept as matched if NULL key or exact match
|
// accept as matched if NULL key or exact match
|
||||||
|
|
||||||
if(!theSection || !strcmp(aLine + 1, theSection))
|
if(!theSection || !strcmp(aStart, theSection))
|
||||||
{
|
{
|
||||||
aSectionFound = TRUE;
|
aSectionFound = TRUE;
|
||||||
}
|
}
|
||||||
@ -185,11 +192,14 @@ GetPrivateProfileString(char *theSection, // section name
|
|||||||
aValue = "";
|
aValue = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aStart = aLine;
|
||||||
|
while(isspace(*aStart)) aStart++;
|
||||||
|
|
||||||
// strip trailing blanks from key
|
// strip trailing blanks from key
|
||||||
|
|
||||||
if(aString)
|
if(aString)
|
||||||
{
|
{
|
||||||
while(--aString >= aLine && *aString == ' ')
|
while(--aString >= aStart && *aString == ' ')
|
||||||
{
|
{
|
||||||
*aString = '\0';
|
*aString = '\0';
|
||||||
}
|
}
|
||||||
@ -197,7 +207,7 @@ GetPrivateProfileString(char *theSection, // section name
|
|||||||
|
|
||||||
// see if key is matched
|
// see if key is matched
|
||||||
|
|
||||||
if(theKey == NULL || !strcmp(theKey, aLine))
|
if(theKey == NULL || !strcmp(theKey, aStart))
|
||||||
{
|
{
|
||||||
// matched -- first, terminate value part
|
// matched -- first, terminate value part
|
||||||
|
|
||||||
|
@ -4,10 +4,10 @@
|
|||||||
#define GPPS_H
|
#define GPPS_H
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#endif
|
#endif
|
||||||
@ -34,7 +34,7 @@ WritePrivateProfileString(char *theSection, // section name
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#undef DWORD
|
#undef DWORD
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
250
src/interfaces/odbc/install-sh
Normal file
250
src/interfaces/odbc/install-sh
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
# This comes from X11R5 (mit/util/scripts/install.sh).
|
||||||
|
#
|
||||||
|
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||||
|
#
|
||||||
|
# Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
# documentation for any purpose is hereby granted without fee, provided that
|
||||||
|
# the above copyright notice appear in all copies and that both that
|
||||||
|
# copyright notice and this permission notice appear in supporting
|
||||||
|
# documentation, and that the name of M.I.T. not be used in advertising or
|
||||||
|
# publicity pertaining to distribution of the software without specific,
|
||||||
|
# written prior permission. M.I.T. makes no representations about the
|
||||||
|
# suitability of this software for any purpose. It is provided "as is"
|
||||||
|
# without express or implied warranty.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch. It can only install one file at a time, a restriction
|
||||||
|
# shared with many OS's install programs.
|
||||||
|
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
|
||||||
|
|
||||||
|
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||||
|
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
|
||||||
|
transformbasename=""
|
||||||
|
transform_arg=""
|
||||||
|
instcmd="$mvprog"
|
||||||
|
chmodcmd="$chmodprog 0755"
|
||||||
|
chowncmd=""
|
||||||
|
chgrpcmd=""
|
||||||
|
stripcmd=""
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=""
|
||||||
|
dst=""
|
||||||
|
dir_arg=""
|
||||||
|
|
||||||
|
while [ x"$1" != x ]; do
|
||||||
|
case $1 in
|
||||||
|
-c) instcmd="$cpprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-d) dir_arg=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-m) chmodcmd="$chmodprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-s) stripcmd="$stripprog"
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
*) if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
src=$1
|
||||||
|
else
|
||||||
|
# this colon is to work around a 386BSD /bin/sh bug
|
||||||
|
:
|
||||||
|
dst=$1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ x"$src" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no input file specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]; then
|
||||||
|
dst=$src
|
||||||
|
src=""
|
||||||
|
|
||||||
|
if [ -d $dst ]; then
|
||||||
|
instcmd=:
|
||||||
|
else
|
||||||
|
instcmd=mkdir
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
|
if [ -f $src -o -d $src ]
|
||||||
|
then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
echo "install: $src does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dst" = x ]
|
||||||
|
then
|
||||||
|
echo "install: no destination specified"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; if your system
|
||||||
|
# does not like double slashes in filenames, you may need to add some logic
|
||||||
|
|
||||||
|
if [ -d $dst ]
|
||||||
|
then
|
||||||
|
dst="$dst"/`basename $src`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## this sed command emulates the dirname command
|
||||||
|
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||||
|
|
||||||
|
# Make sure that the destination directory exists.
|
||||||
|
# this part is taken from Noah Friedman's mkinstalldirs script
|
||||||
|
|
||||||
|
# Skip lots of stat calls in the usual case.
|
||||||
|
if [ ! -d "$dstdir" ]; then
|
||||||
|
defaultIFS='
|
||||||
|
'
|
||||||
|
IFS="${IFS-${defaultIFS}}"
|
||||||
|
|
||||||
|
oIFS="${IFS}"
|
||||||
|
# Some sh's can't handle IFS=/ for some reason.
|
||||||
|
IFS='%'
|
||||||
|
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||||
|
IFS="${oIFS}"
|
||||||
|
|
||||||
|
pathcomp=''
|
||||||
|
|
||||||
|
while [ $# -ne 0 ] ; do
|
||||||
|
pathcomp="${pathcomp}${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ ! -d "${pathcomp}" ] ;
|
||||||
|
then
|
||||||
|
$mkdirprog "${pathcomp}"
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
pathcomp="${pathcomp}/"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ x"$dir_arg" != x ]
|
||||||
|
then
|
||||||
|
$doit $instcmd $dst &&
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
||||||
|
else
|
||||||
|
|
||||||
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
|
if [ x"$transformarg" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
dstfile=`basename $dst $transformbasename |
|
||||||
|
sed $transformarg`$transformbasename
|
||||||
|
fi
|
||||||
|
|
||||||
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
|
if [ x"$dstfile" = x ]
|
||||||
|
then
|
||||||
|
dstfile=`basename $dst`
|
||||||
|
else
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make a temp file name in the proper directory.
|
||||||
|
|
||||||
|
dsttmp=$dstdir/#inst.$$#
|
||||||
|
|
||||||
|
# Move or copy the file name to the temp name
|
||||||
|
|
||||||
|
$doit $instcmd $src $dsttmp &&
|
||||||
|
|
||||||
|
trap "rm -f ${dsttmp}" 0 &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits
|
||||||
|
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||||
|
|
||||||
|
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
||||||
|
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
|
fi &&
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef _IODBC_H
|
#ifndef _IODBC_H
|
||||||
#define _IODBC_H
|
#define _IODBC_H
|
||||||
|
|
||||||
# if !defined(WINDOWS) && !defined(WIN32_SYSTEM)
|
# if !defined(WIN32) && !defined(WIN32_SYSTEM)
|
||||||
# define _UNIX_
|
# define _UNIX_
|
||||||
|
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
# endif /* _UNIX_ */
|
# endif /* _UNIX_ */
|
||||||
|
|
||||||
# if defined(WINDOWS) || defined(WIN32_SYSTEM)
|
# if defined(WIN32) || defined(WIN32_SYSTEM)
|
||||||
|
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
# include <windowsx.h>
|
# include <windowsx.h>
|
||||||
@ -55,7 +55,7 @@
|
|||||||
# define STREQ(a, b) (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
|
# define STREQ(a, b) (_fstrcmp((char FAR*)(a), (char FAR*)(b) == 0)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# endif /* WINDOWS */
|
# endif /* WIN32 */
|
||||||
|
|
||||||
# define SYSERR (-1)
|
# define SYSERR (-1)
|
||||||
|
|
||||||
|
@ -14,12 +14,45 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <varargs.h>
|
#include <varargs.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
#if HAVE_PWD_H
|
||||||
|
#include <pwd.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#else
|
||||||
|
#include <process.h> /* Byron: is this where Windows keeps def. of getpid ? */
|
||||||
|
#endif
|
||||||
|
|
||||||
extern GLOBAL_VALUES globals;
|
extern GLOBAL_VALUES globals;
|
||||||
|
void generate_filename(char*,char*,char*);
|
||||||
|
|
||||||
|
void
|
||||||
|
generate_filename(char* dirname,char* prefix,char* filename)
|
||||||
|
{
|
||||||
|
int pid = 0;
|
||||||
|
#ifndef WIN32
|
||||||
|
struct passwd *ptr = 0;
|
||||||
|
ptr = getpwuid(getuid());
|
||||||
|
#endif
|
||||||
|
pid = getpid();
|
||||||
|
if(dirname == 0 || filename == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
strcpy(filename,dirname);
|
||||||
|
strcat(filename,DIRSEPERATOR);
|
||||||
|
if(prefix != 0)
|
||||||
|
strcat(filename,prefix);
|
||||||
|
#ifndef WIN32
|
||||||
|
strcat(filename,ptr->pw_name);
|
||||||
|
#endif
|
||||||
|
sprintf(filename,"%s%d%s",filename,pid,".log");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MY_LOG
|
#ifdef MY_LOG
|
||||||
|
|
||||||
@ -29,15 +62,17 @@ va_dcl
|
|||||||
{
|
{
|
||||||
char *fmt;
|
char *fmt;
|
||||||
char *args;
|
char *args;
|
||||||
|
char filebuf[80];
|
||||||
static FILE *LOGFP = 0;
|
FILE* LOGFP = globals.mylogFP;
|
||||||
|
|
||||||
if ( globals.debug) {
|
if ( globals.debug) {
|
||||||
va_start(args);
|
va_start(args);
|
||||||
fmt = va_arg(args, char *);
|
fmt = va_arg(args, char *);
|
||||||
|
|
||||||
if (! LOGFP) {
|
if (! LOGFP) {
|
||||||
LOGFP = fopen(MYLOGFILE, "w");
|
generate_filename(MYLOGDIR,MYLOGFILE,filebuf);
|
||||||
|
LOGFP = fopen(filebuf, "w");
|
||||||
|
globals.mylogFP = LOGFP;
|
||||||
setbuf(LOGFP, NULL);
|
setbuf(LOGFP, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,14 +92,18 @@ va_dcl
|
|||||||
{
|
{
|
||||||
char *fmt;
|
char *fmt;
|
||||||
char *args;
|
char *args;
|
||||||
static FILE *LOGFP = 0;
|
char filebuf[80];
|
||||||
|
FILE* LOGFP = globals.qlogFP;
|
||||||
|
|
||||||
if ( globals.commlog) {
|
if ( globals.commlog) {
|
||||||
va_start(args);
|
va_start(args);
|
||||||
fmt = va_arg(args, char *);
|
fmt = va_arg(args, char *);
|
||||||
|
|
||||||
|
|
||||||
if (! LOGFP) {
|
if (! LOGFP) {
|
||||||
LOGFP = fopen(QLOGFILE, "w");
|
generate_filename(QLOGDIR,QLOGFILE,filebuf);
|
||||||
|
LOGFP = fopen(filebuf, "w");
|
||||||
|
globals.qlogFP = LOGFP;
|
||||||
setbuf(LOGFP, NULL);
|
setbuf(LOGFP, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,15 +118,15 @@ static FILE *LOGFP = 0;
|
|||||||
/* Undefine these because windows.h will redefine and cause a warning */
|
/* Undefine these because windows.h will redefine and cause a warning */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
#undef va_start
|
#undef va_start
|
||||||
#undef va_end
|
#undef va_end
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#else
|
#else
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
#define __MISC_H__
|
#define __MISC_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include "gpps.h"
|
#include "gpps.h"
|
||||||
#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
|
#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)
|
||||||
#endif
|
#endif
|
||||||
@ -26,7 +26,7 @@
|
|||||||
portion of the registry. You may have to manually add this key.
|
portion of the registry. You may have to manually add this key.
|
||||||
This logfile is intended for development use, not for an end user!
|
This logfile is intended for development use, not for an end user!
|
||||||
*/
|
*/
|
||||||
// #define MY_LOG
|
#define MY_LOG
|
||||||
|
|
||||||
|
|
||||||
/* Uncomment Q_LOG to compile in the qlog() statements (Communications log, i.e. CommLog).
|
/* Uncomment Q_LOG to compile in the qlog() statements (Communications log, i.e. CommLog).
|
||||||
@ -39,10 +39,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifdef MY_LOG
|
#ifdef MY_LOG
|
||||||
#ifdef UNIX
|
#define MYLOGFILE "mylog_"
|
||||||
#define MYLOGFILE "/tmp/mylog.log"
|
#ifndef WIN32
|
||||||
|
#define MYLOGDIR "/tmp"
|
||||||
#else
|
#else
|
||||||
#define MYLOGFILE "c:\\mylog.log"
|
#define MYLOGDIR "c:"
|
||||||
#endif
|
#endif
|
||||||
void mylog(); /* prototype */
|
void mylog(); /* prototype */
|
||||||
#else
|
#else
|
||||||
@ -50,16 +51,23 @@ void mylog(); /* prototype */
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_LOG
|
#ifdef Q_LOG
|
||||||
#ifdef UNIX
|
#define QLOGFILE "psqlodbc_"
|
||||||
#define QLOGFILE "/tmp/psqlodbc.log"
|
#ifndef WIN32
|
||||||
|
#define QLOGDIR "/tmp"
|
||||||
#else
|
#else
|
||||||
#define QLOGFILE "c:\\psqlodbc.log"
|
#define QLOGDIR "c:"
|
||||||
#endif
|
#endif
|
||||||
void qlog(); /* prototype */
|
void qlog(); /* prototype */
|
||||||
#else
|
#else
|
||||||
#define qlog // qlog
|
#define qlog // qlog
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
#define DIRSEPERATOR "/"
|
||||||
|
#else
|
||||||
|
#define DIRSEPERATOR "\\"
|
||||||
|
#endif
|
||||||
|
|
||||||
void remove_newlines(char *string);
|
void remove_newlines(char *string);
|
||||||
char *strncpy_null(char *dst, const char *src, int len);
|
char *strncpy_null(char *dst, const char *src, int len);
|
||||||
char *trim(char *string);
|
char *trim(char *string);
|
||||||
|
@ -14,12 +14,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -43,9 +43,11 @@ RETCODE SQL_API SQLSetConnectOption(
|
|||||||
UWORD fOption,
|
UWORD fOption,
|
||||||
UDWORD vParam)
|
UDWORD vParam)
|
||||||
{
|
{
|
||||||
char *func="SQLSetConnectOption";
|
static char *func="SQLSetConnectOption";
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! conn) {
|
if ( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -101,7 +103,7 @@ ConnectionClass *conn = (ConnectionClass *) hdbc;
|
|||||||
char option[64];
|
char option[64];
|
||||||
conn->errormsg = "Driver does not support setting this connect option";
|
conn->errormsg = "Driver does not support setting this connect option";
|
||||||
conn->errornumber = CONN_UNSUPPORTED_OPTION;
|
conn->errornumber = CONN_UNSUPPORTED_OPTION;
|
||||||
sprintf(option, "fOption=%d, vParam=%d", fOption, vParam);
|
sprintf(option, "fOption=%d, vParam=%ld", fOption, vParam);
|
||||||
CC_log_error(func, option, conn);
|
CC_log_error(func, option, conn);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
@ -118,9 +120,11 @@ RETCODE SQL_API SQLGetConnectOption(
|
|||||||
UWORD fOption,
|
UWORD fOption,
|
||||||
PTR pvParam)
|
PTR pvParam)
|
||||||
{
|
{
|
||||||
char *func="SQLGetConnectOption";
|
static char *func="SQLGetConnectOption";
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if (! conn) {
|
if (! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -162,10 +166,12 @@ RETCODE SQL_API SQLSetStmtOption(
|
|||||||
UWORD fOption,
|
UWORD fOption,
|
||||||
UDWORD vParam)
|
UDWORD vParam)
|
||||||
{
|
{
|
||||||
char *func="SQLSetStmtOption";
|
static char *func="SQLSetStmtOption";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char changed = FALSE;
|
char changed = FALSE;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
// thought we could fake Access out by just returning SQL_SUCCESS
|
// thought we could fake Access out by just returning SQL_SUCCESS
|
||||||
// all the time, but it tries to set a huge value for SQL_MAX_LENGTH
|
// all the time, but it tries to set a huge value for SQL_MAX_LENGTH
|
||||||
// and expects the driver to reduce it to the real value
|
// and expects the driver to reduce it to the real value
|
||||||
@ -260,7 +266,7 @@ char changed = FALSE;
|
|||||||
char option[64];
|
char option[64];
|
||||||
stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
|
stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
|
||||||
stmt->errormsg = "Driver does not support setting this statement option";
|
stmt->errormsg = "Driver does not support setting this statement option";
|
||||||
sprintf(option, "fOption=%d, vParam=%d", fOption, vParam);
|
sprintf(option, "fOption=%d, vParam=%ld", fOption, vParam);
|
||||||
SC_log_error(func, option, stmt);
|
SC_log_error(func, option, stmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
@ -283,9 +289,11 @@ RETCODE SQL_API SQLGetStmtOption(
|
|||||||
UWORD fOption,
|
UWORD fOption,
|
||||||
PTR pvParam)
|
PTR pvParam)
|
||||||
{
|
{
|
||||||
char *func="SQLGetStmtOption";
|
static char *func="SQLGetStmtOption";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
// thought we could fake Access out by just returning SQL_SUCCESS
|
// thought we could fake Access out by just returning SQL_SUCCESS
|
||||||
// all the time, but it tries to set a huge value for SQL_MAX_LENGTH
|
// all the time, but it tries to set a huge value for SQL_MAX_LENGTH
|
||||||
// and expects the driver to reduce it to the real value
|
// and expects the driver to reduce it to the real value
|
||||||
|
@ -20,14 +20,15 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "statement.h"
|
#include "statement.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
#include "qresult.h"
|
#include "qresult.h"
|
||||||
#include "pgtypes.h"
|
#include "pgtypes.h"
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#if !HAVE_STRICMP
|
#ifndef HAVE_STRICMP
|
||||||
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
||||||
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
||||||
#endif
|
#endif
|
||||||
@ -37,6 +38,10 @@
|
|||||||
#define TAB_INCR 8
|
#define TAB_INCR 8
|
||||||
#define COL_INCR 16
|
#define COL_INCR 16
|
||||||
|
|
||||||
|
char *getNextToken(char *s, char *token, int smax, char *delim, char *quote, char *dquote, char *numeric);
|
||||||
|
void getColInfo(COL_INFO *col_info, FIELD_INFO *fi, int k);
|
||||||
|
char searchColInfo(COL_INFO *col_info, FIELD_INFO *fi);
|
||||||
|
|
||||||
char *
|
char *
|
||||||
getNextToken(char *s, char *token, int smax, char *delim, char *quote, char *dquote, char *numeric)
|
getNextToken(char *s, char *token, int smax, char *delim, char *quote, char *dquote, char *numeric)
|
||||||
{
|
{
|
||||||
@ -106,7 +111,9 @@ char qc, in_escape = FALSE;
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ispunct(s[i])) {
|
if ( ispunct(s[i]) && s[i] != '_') {
|
||||||
|
mylog("got ispunct: s[%d] = '%c'\n", i, s[i]);
|
||||||
|
|
||||||
if (out == 0) {
|
if (out == 0) {
|
||||||
token[out++] = s[i++];
|
token[out++] = s[i++];
|
||||||
break;
|
break;
|
||||||
@ -205,12 +212,13 @@ char *col;
|
|||||||
char
|
char
|
||||||
parse_statement(StatementClass *stmt)
|
parse_statement(StatementClass *stmt)
|
||||||
{
|
{
|
||||||
|
static char *func="parse_statement";
|
||||||
char token[256];
|
char token[256];
|
||||||
char delim, quote, dquote, numeric, unquoted;
|
char delim, quote, dquote, numeric, unquoted;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
char in_select = FALSE, in_distinct = FALSE, in_on = FALSE, in_from = FALSE, in_where = FALSE, in_table = FALSE;
|
char in_select = FALSE, in_distinct = FALSE, in_on = FALSE, in_from = FALSE, in_where = FALSE, in_table = FALSE;
|
||||||
char in_field = FALSE, in_expr = FALSE, in_func = FALSE, in_dot = FALSE, in_as = FALSE;
|
char in_field = FALSE, in_expr = FALSE, in_func = FALSE, in_dot = FALSE, in_as = FALSE;
|
||||||
int j, i, k, n, blevel = 0;
|
int j, i, k = 0, n, blevel = 0;
|
||||||
FIELD_INFO **fi;
|
FIELD_INFO **fi;
|
||||||
TABLE_INFO **ti;
|
TABLE_INFO **ti;
|
||||||
char parse;
|
char parse;
|
||||||
@ -220,6 +228,8 @@ StatementClass *col_stmt;
|
|||||||
RETCODE result;
|
RETCODE result;
|
||||||
|
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
ptr = stmt->statement;
|
ptr = stmt->statement;
|
||||||
fi = stmt->fi;
|
fi = stmt->fi;
|
||||||
ti = stmt->ti;
|
ti = stmt->ti;
|
||||||
@ -227,7 +237,7 @@ RETCODE result;
|
|||||||
stmt->nfld = 0;
|
stmt->nfld = 0;
|
||||||
stmt->ntab = 0;
|
stmt->ntab = 0;
|
||||||
|
|
||||||
while (ptr = getNextToken(ptr, token, sizeof(token), &delim, "e, &dquote, &numeric)) {
|
while ((ptr = getNextToken(ptr, token, sizeof(token), &delim, "e, &dquote, &numeric)) != NULL) {
|
||||||
|
|
||||||
unquoted = ! ( quote || dquote );
|
unquoted = ! ( quote || dquote );
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
@ -26,7 +26,7 @@
|
|||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
#include "qresult.h"
|
#include "qresult.h"
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -39,6 +39,8 @@
|
|||||||
|
|
||||||
extern GLOBAL_VALUES globals;
|
extern GLOBAL_VALUES globals;
|
||||||
|
|
||||||
|
Int4 getCharPrecision(StatementClass *stmt, Int4 type, int col, int handle_unknown_size_as);
|
||||||
|
|
||||||
|
|
||||||
/* these are the types we support. all of the pgtype_ functions should */
|
/* these are the types we support. all of the pgtype_ functions should */
|
||||||
/* return values for each one of these. */
|
/* return values for each one of these. */
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "psqlodbc.h"
|
#include "psqlodbc.h"
|
||||||
#include "dlg_specific.h"
|
#include "dlg_specific.h"
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
@ -33,7 +33,11 @@
|
|||||||
|
|
||||||
GLOBAL_VALUES globals;
|
GLOBAL_VALUES globals;
|
||||||
|
|
||||||
#ifndef UNIX /* again find a WINDOWS #ifdef */
|
BOOL _init(void);
|
||||||
|
BOOL _fini(void);
|
||||||
|
RETCODE SQL_API SQLDummyOrdinal(void);
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
HINSTANCE NEAR s_hModule; /* Saved module handle. */
|
HINSTANCE NEAR s_hModule; /* Saved module handle. */
|
||||||
|
|
||||||
/* This is where the Driver Manager attaches to this Driver */
|
/* This is where the Driver Manager attaches to this Driver */
|
||||||
@ -60,7 +64,7 @@ WSADATA wsaData;
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
getGlobalDefaults();
|
getGlobalDefaults(DBMS_NAME, ODBCINST_INI, FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_THREAD_ATTACH:
|
case DLL_THREAD_ATTACH:
|
||||||
@ -84,7 +88,7 @@ WSADATA wsaData;
|
|||||||
UNREFERENCED_PARAMETER(lpReserved);
|
UNREFERENCED_PARAMETER(lpReserved);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* UNIX */
|
#else /* WIN32 */
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
#define TRUE (BOOL)1
|
#define TRUE (BOOL)1
|
||||||
@ -99,7 +103,7 @@ WSADATA wsaData;
|
|||||||
BOOL
|
BOOL
|
||||||
_init(void)
|
_init(void)
|
||||||
{
|
{
|
||||||
getGlobalDefaults();
|
getGlobalDefaults(DBMS_NAME, ODBCINST_INI, FALSE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,10 +12,12 @@
|
|||||||
#define __PSQLODBC_H__
|
#define __PSQLODBC_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#include <stdio.h> /* for FILE* pointers: see GLOBAL_VALUES */
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
#define Int4 long int
|
#define Int4 long int
|
||||||
#define UInt4 unsigned int
|
#define UInt4 unsigned int
|
||||||
#define Int2 short
|
#define Int2 short
|
||||||
@ -67,10 +69,10 @@ typedef UInt4 Oid;
|
|||||||
/* Driver stuff */
|
/* Driver stuff */
|
||||||
#define DRIVERNAME "PostgreSQL ODBC"
|
#define DRIVERNAME "PostgreSQL ODBC"
|
||||||
#define DBMS_NAME "PostgreSQL"
|
#define DBMS_NAME "PostgreSQL"
|
||||||
#define DBMS_VERSION "06.30.0248 PostgreSQL 6.3"
|
#define DBMS_VERSION "06.30.0250 PostgreSQL 6.3"
|
||||||
#define POSTGRESDRIVERVERSION "06.30.0248"
|
#define POSTGRESDRIVERVERSION "06.30.0250"
|
||||||
|
|
||||||
#ifndef UNIX
|
#ifdef WIN32
|
||||||
#define DRIVER_FILE_NAME "PSQLODBC.DLL"
|
#define DRIVER_FILE_NAME "PSQLODBC.DLL"
|
||||||
#else
|
#else
|
||||||
#define DRIVER_FILE_NAME "libpsqlodbc.so"
|
#define DRIVER_FILE_NAME "libpsqlodbc.so"
|
||||||
@ -114,6 +116,8 @@ typedef struct GlobalValues_
|
|||||||
char parse;
|
char parse;
|
||||||
char extra_systable_prefixes[MEDIUM_REGISTRY_LEN];
|
char extra_systable_prefixes[MEDIUM_REGISTRY_LEN];
|
||||||
char conn_settings[LARGE_REGISTRY_LEN];
|
char conn_settings[LARGE_REGISTRY_LEN];
|
||||||
|
FILE* mylogFP;
|
||||||
|
FILE* qlogFP;
|
||||||
} GLOBAL_VALUES;
|
} GLOBAL_VALUES;
|
||||||
|
|
||||||
|
|
||||||
@ -127,7 +131,6 @@ typedef struct GlobalValues_
|
|||||||
#define MAX_VARCHAR_SIZE 254 /* maximum size of a varchar (not including null term) */
|
#define MAX_VARCHAR_SIZE 254 /* maximum size of a varchar (not including null term) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -203,8 +203,8 @@ END
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 6,30,2,48
|
FILEVERSION 6,30,2,50
|
||||||
PRODUCTVERSION 6,30,2,48
|
PRODUCTVERSION 6,30,2,50
|
||||||
FILEFLAGSMASK 0x3L
|
FILEFLAGSMASK 0x3L
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -222,12 +222,12 @@ BEGIN
|
|||||||
VALUE "Comments", "PostgreSQL ODBC driver for Windows 95\0"
|
VALUE "Comments", "PostgreSQL ODBC driver for Windows 95\0"
|
||||||
VALUE "CompanyName", "Insight Distribution Systems\0"
|
VALUE "CompanyName", "Insight Distribution Systems\0"
|
||||||
VALUE "FileDescription", "PostgreSQL Driver\0"
|
VALUE "FileDescription", "PostgreSQL Driver\0"
|
||||||
VALUE "FileVersion", " 6.30.0248\0"
|
VALUE "FileVersion", " 6.30.0250\0"
|
||||||
VALUE "InternalName", "psqlodbc\0"
|
VALUE "InternalName", "psqlodbc\0"
|
||||||
VALUE "LegalTrademarks", "ODBC(TM) is a trademark of Microsoft Corporation. Microsoft<66> is a registered trademark of Microsoft Corporation. Windows(TM) is a trademark of Microsoft Corporation.\0"
|
VALUE "LegalTrademarks", "ODBC(TM) is a trademark of Microsoft Corporation. Microsoft<66> is a registered trademark of Microsoft Corporation. Windows(TM) is a trademark of Microsoft Corporation.\0"
|
||||||
VALUE "OriginalFilename", "psqlodbc.dll\0"
|
VALUE "OriginalFilename", "psqlodbc.dll\0"
|
||||||
VALUE "ProductName", "Microsoft Open Database Connectivity\0"
|
VALUE "ProductName", "Microsoft Open Database Connectivity\0"
|
||||||
VALUE "ProductVersion", " 6.30.0248\0"
|
VALUE "ProductVersion", " 6.30.0250\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
@ -501,7 +501,7 @@ ColumnInfoClass *flds;
|
|||||||
SOCK_get_n_char(sock, buffer, len);
|
SOCK_get_n_char(sock, buffer, len);
|
||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
|
|
||||||
// mylog("qresult: len=%d, buffer='%s'\n", len, buffer);
|
mylog("qresult: len=%d, buffer='%s'\n", len, buffer);
|
||||||
|
|
||||||
this_tuplefield[field_lf].len = len;
|
this_tuplefield[field_lf].len = len;
|
||||||
this_tuplefield[field_lf].value = buffer;
|
this_tuplefield[field_lf].value = buffer;
|
||||||
|
@ -65,8 +65,7 @@ struct QResultClass_ {
|
|||||||
/* These functions are for retrieving data from the qresult */
|
/* These functions are for retrieving data from the qresult */
|
||||||
#define QR_get_value_manual(self, tupleno, fieldno) (TL_get_fieldval(self->manual_tuples, tupleno, fieldno))
|
#define QR_get_value_manual(self, tupleno, fieldno) (TL_get_fieldval(self->manual_tuples, tupleno, fieldno))
|
||||||
#define QR_get_value_backend(self, fieldno) (self->tupleField[fieldno].value)
|
#define QR_get_value_backend(self, fieldno) (self->tupleField[fieldno].value)
|
||||||
#define QR_get_value_backend_row(self, tupleno, fieldno) \
|
#define QR_get_value_backend_row(self, tupleno, fieldno) ((self->backend_tuples + (tupleno * self->num_fields))[fieldno].value)
|
||||||
((self->backend_tuples + (tupleno * self->num_fields))[fieldno].value)
|
|
||||||
|
|
||||||
/* These functions are used by both manual and backend results */
|
/* These functions are used by both manual and backend results */
|
||||||
#define QR_NumResultCols(self) (CI_get_num_fields(self->fields))
|
#define QR_NumResultCols(self) (CI_get_num_fields(self->fields))
|
||||||
@ -93,7 +92,7 @@ struct QResultClass_ {
|
|||||||
#define QR_get_status(self) (self->status)
|
#define QR_get_status(self) (self->status)
|
||||||
|
|
||||||
// Core Functions
|
// Core Functions
|
||||||
QResultClass *QR_Constructor();
|
QResultClass *QR_Constructor(void);
|
||||||
void QR_Destructor(QResultClass *self);
|
void QR_Destructor(QResultClass *self);
|
||||||
char QR_read_tuple(QResultClass *self, char binary);
|
char QR_read_tuple(QResultClass *self, char binary);
|
||||||
int QR_next_tuple(QResultClass *self);
|
int QR_next_tuple(QResultClass *self);
|
||||||
|
@ -70,3 +70,26 @@ But for now, it sure is fun to stick a Word document, Visio document, or avi of
|
|||||||
baby into a database column, even if you will fill up your server's hard disk after a while!
|
baby into a database column, even if you will fill up your server's hard disk after a while!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
III. Using Row Versioning feature and creating the missing equals operator
|
||||||
|
|
||||||
|
In order to use row versioning, you must overload the int4eq function for use
|
||||||
|
with the xid type. Also, you need to create an operator to compare xid to int4.
|
||||||
|
You must do this for each database you want to use this feature on.
|
||||||
|
Here are the details:
|
||||||
|
|
||||||
|
create function int4eq(xid,int4)
|
||||||
|
returns bool
|
||||||
|
as ''
|
||||||
|
language 'internal';
|
||||||
|
|
||||||
|
create operator = (
|
||||||
|
leftarg=xid,
|
||||||
|
rightarg=int4,
|
||||||
|
procedure=int4eq,
|
||||||
|
commutator='=',
|
||||||
|
negator='<>',
|
||||||
|
restrict=eqsel,
|
||||||
|
join=eqjoinsel
|
||||||
|
);
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isqlext.h"
|
#include "isqlext.h"
|
||||||
#else
|
#else
|
||||||
@ -42,28 +42,13 @@
|
|||||||
|
|
||||||
extern GLOBAL_VALUES globals;
|
extern GLOBAL_VALUES globals;
|
||||||
|
|
||||||
RETCODE SQL_API SQLFetch(HSTMT hstmt)
|
|
||||||
{
|
|
||||||
return _SQLFetch(hstmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
RETCODE SQL_API SQLGetData(
|
|
||||||
HSTMT hstmt,
|
|
||||||
UWORD icol,
|
|
||||||
SWORD fCType,
|
|
||||||
PTR rgbValue,
|
|
||||||
SDWORD cbValueMax,
|
|
||||||
SDWORD FAR *pcbValue)
|
|
||||||
{
|
|
||||||
|
|
||||||
return _SQLGetData(hstmt, icol, fCType, rgbValue, cbValueMax, pcbValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
RETCODE SQL_API SQLRowCount(
|
RETCODE SQL_API SQLRowCount(
|
||||||
HSTMT hstmt,
|
HSTMT hstmt,
|
||||||
SDWORD FAR *pcrow)
|
SDWORD FAR *pcrow)
|
||||||
{
|
{
|
||||||
char *func="SQLRowCount";
|
static char *func="SQLRowCount";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
QResultClass *res;
|
QResultClass *res;
|
||||||
char *msg, *ptr;
|
char *msg, *ptr;
|
||||||
@ -117,7 +102,7 @@ RETCODE SQL_API SQLNumResultCols(
|
|||||||
HSTMT hstmt,
|
HSTMT hstmt,
|
||||||
SWORD FAR *pccol)
|
SWORD FAR *pccol)
|
||||||
{
|
{
|
||||||
char *func="SQLNumResultCols";
|
static char *func="SQLNumResultCols";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
QResultClass *result;
|
QResultClass *result;
|
||||||
char parse_ok;
|
char parse_ok;
|
||||||
@ -182,16 +167,18 @@ RETCODE SQL_API SQLDescribeCol(
|
|||||||
SWORD FAR *pibScale,
|
SWORD FAR *pibScale,
|
||||||
SWORD FAR *pfNullable)
|
SWORD FAR *pfNullable)
|
||||||
{
|
{
|
||||||
char *func="SQLDescribeCol";
|
static char *func="SQLDescribeCol";
|
||||||
/* gets all the information about a specific column */
|
/* gets all the information about a specific column */
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
QResultClass *result;
|
QResultClass *result;
|
||||||
char *col_name;
|
char *col_name = NULL;
|
||||||
Int4 fieldtype;
|
Int4 fieldtype = 0;
|
||||||
int precision;
|
int precision = 0;
|
||||||
ConnInfo *ci;
|
ConnInfo *ci;
|
||||||
char parse_ok;
|
char parse_ok;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -201,13 +188,9 @@ char parse_ok;
|
|||||||
|
|
||||||
SC_clear_error(stmt);
|
SC_clear_error(stmt);
|
||||||
|
|
||||||
if(icol < 1) {
|
/* Dont check for bookmark column. This is the responsibility
|
||||||
// we do not support bookmarks
|
of the driver manager.
|
||||||
stmt->errormsg = "Bookmarks are not currently supported.";
|
*/
|
||||||
stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
|
|
||||||
SC_log_error(func, "", stmt);
|
|
||||||
return SQL_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
icol--; /* use zero based column numbers */
|
icol--; /* use zero based column numbers */
|
||||||
|
|
||||||
@ -342,15 +325,16 @@ RETCODE SQL_API SQLColAttributes(
|
|||||||
SWORD FAR *pcbDesc,
|
SWORD FAR *pcbDesc,
|
||||||
SDWORD FAR *pfDesc)
|
SDWORD FAR *pfDesc)
|
||||||
{
|
{
|
||||||
char *func = "SQLColAttributes";
|
static char *func = "SQLColAttributes";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
char *value;
|
char *value;
|
||||||
Int4 field_type;
|
Int4 field_type = 0;
|
||||||
ConnInfo *ci;
|
ConnInfo *ci;
|
||||||
int unknown_sizes;
|
int unknown_sizes;
|
||||||
int cols;
|
int cols = 0;
|
||||||
char parse_ok;
|
char parse_ok;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if( ! stmt) {
|
if( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -359,13 +343,10 @@ char parse_ok;
|
|||||||
|
|
||||||
ci = &(stmt->hdbc->connInfo);
|
ci = &(stmt->hdbc->connInfo);
|
||||||
|
|
||||||
if(icol < 1) {
|
/* Dont check for bookmark column. This is the responsibility
|
||||||
// we do not support bookmarks
|
of the driver manager. For certain types of arguments, the column
|
||||||
stmt->errormsg = "Bookmarks are not currently supported.";
|
number is ignored anyway, so it may be 0.
|
||||||
stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR;
|
*/
|
||||||
SC_log_error(func, "", stmt);
|
|
||||||
return SQL_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
icol--;
|
icol--;
|
||||||
|
|
||||||
@ -383,6 +364,16 @@ char parse_ok;
|
|||||||
|
|
||||||
cols = stmt->nfld;
|
cols = stmt->nfld;
|
||||||
|
|
||||||
|
/* Column Count is a special case. The Column number is ignored
|
||||||
|
in this case.
|
||||||
|
*/
|
||||||
|
if (fDescType == SQL_COLUMN_COUNT) {
|
||||||
|
if (pfDesc)
|
||||||
|
*pfDesc = cols;
|
||||||
|
|
||||||
|
return SQL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (stmt->parse_status != STMT_PARSE_FATAL && stmt->fi && stmt->fi[icol]) {
|
if (stmt->parse_status != STMT_PARSE_FATAL && stmt->fi && stmt->fi[icol]) {
|
||||||
|
|
||||||
if (icol >= cols) {
|
if (icol >= cols) {
|
||||||
@ -411,6 +402,17 @@ char parse_ok;
|
|||||||
}
|
}
|
||||||
|
|
||||||
cols = QR_NumResultCols(stmt->result);
|
cols = QR_NumResultCols(stmt->result);
|
||||||
|
|
||||||
|
/* Column Count is a special case. The Column number is ignored
|
||||||
|
in this case.
|
||||||
|
*/
|
||||||
|
if (fDescType == SQL_COLUMN_COUNT) {
|
||||||
|
if (pfDesc)
|
||||||
|
*pfDesc = cols;
|
||||||
|
|
||||||
|
return SQL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (icol >= cols) {
|
if (icol >= cols) {
|
||||||
stmt->errornumber = STMT_INVALID_COLUMN_NUMBER_ERROR;
|
stmt->errornumber = STMT_INVALID_COLUMN_NUMBER_ERROR;
|
||||||
stmt->errormsg = "Invalid column number in DescribeCol.";
|
stmt->errormsg = "Invalid column number in DescribeCol.";
|
||||||
@ -438,10 +440,10 @@ char parse_ok;
|
|||||||
*pfDesc = pgtype_case_sensitive(stmt, field_type);
|
*pfDesc = pgtype_case_sensitive(stmt, field_type);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SQL_COLUMN_COUNT:
|
/* This special case is handled above.
|
||||||
if (pfDesc)
|
|
||||||
*pfDesc = cols;
|
case SQL_COLUMN_COUNT:
|
||||||
break;
|
*/
|
||||||
|
|
||||||
case SQL_COLUMN_DISPLAY_SIZE:
|
case SQL_COLUMN_DISPLAY_SIZE:
|
||||||
if (pfDesc) {
|
if (pfDesc) {
|
||||||
@ -593,7 +595,7 @@ char parse_ok;
|
|||||||
|
|
||||||
// Returns result data for a single column in the current row.
|
// Returns result data for a single column in the current row.
|
||||||
|
|
||||||
RETCODE SQL_API _SQLGetData(
|
RETCODE SQL_API SQLGetData(
|
||||||
HSTMT hstmt,
|
HSTMT hstmt,
|
||||||
UWORD icol,
|
UWORD icol,
|
||||||
SWORD fCType,
|
SWORD fCType,
|
||||||
@ -601,7 +603,7 @@ RETCODE SQL_API _SQLGetData(
|
|||||||
SDWORD cbValueMax,
|
SDWORD cbValueMax,
|
||||||
SDWORD FAR *pcbValue)
|
SDWORD FAR *pcbValue)
|
||||||
{
|
{
|
||||||
char *func="SQLGetData";
|
static char *func="SQLGetData";
|
||||||
QResultClass *res;
|
QResultClass *res;
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
int num_cols, num_rows;
|
int num_cols, num_rows;
|
||||||
@ -737,10 +739,10 @@ mylog("SQLGetData: enter, stmt=%u\n", stmt);
|
|||||||
// Returns data for bound columns in the current row ("hstmt->iCursor"),
|
// Returns data for bound columns in the current row ("hstmt->iCursor"),
|
||||||
// advances the cursor.
|
// advances the cursor.
|
||||||
|
|
||||||
RETCODE SQL_API _SQLFetch(
|
RETCODE SQL_API SQLFetch(
|
||||||
HSTMT hstmt)
|
HSTMT hstmt)
|
||||||
{
|
{
|
||||||
char *func = "SQLFetch";
|
static char *func = "SQLFetch";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
QResultClass *res;
|
QResultClass *res;
|
||||||
int retval;
|
int retval;
|
||||||
@ -750,6 +752,8 @@ char *value;
|
|||||||
ColumnInfoClass *ci;
|
ColumnInfoClass *ci;
|
||||||
// TupleField *tupleField;
|
// TupleField *tupleField;
|
||||||
|
|
||||||
|
mylog("SQLFetch: stmt = %u, stmt->result= %u\n", stmt, stmt->result);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -790,8 +794,7 @@ ColumnInfoClass *ci;
|
|||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
mylog("manual_result = %d, use_declarefetch = %d\n",
|
mylog("manual_result = %d, use_declarefetch = %d\n", stmt->manual_result, globals.use_declarefetch);
|
||||||
stmt->manual_result, globals.use_declarefetch);
|
|
||||||
|
|
||||||
if ( stmt->manual_result || ! globals.use_declarefetch) {
|
if ( stmt->manual_result || ! globals.use_declarefetch) {
|
||||||
|
|
||||||
@ -832,8 +835,7 @@ ColumnInfoClass *ci;
|
|||||||
|
|
||||||
for (lf=0; lf < num_cols; lf++) {
|
for (lf=0; lf < num_cols; lf++) {
|
||||||
|
|
||||||
mylog("fetch: cols=%d, lf=%d, stmt = %u, stmt->bindings = %u, buffer[] = %u\n",
|
mylog("fetch: cols=%d, lf=%d, stmt = %u, stmt->bindings = %u, buffer[] = %u\n", num_cols, lf, stmt, stmt->bindings, stmt->bindings[lf].buffer);
|
||||||
num_cols, lf, stmt, stmt->bindings, stmt->bindings[lf].buffer);
|
|
||||||
|
|
||||||
if (stmt->bindings[lf].buffer != NULL) {
|
if (stmt->bindings[lf].buffer != NULL) {
|
||||||
// this column has a binding
|
// this column has a binding
|
||||||
@ -843,8 +845,10 @@ ColumnInfoClass *ci;
|
|||||||
|
|
||||||
mylog("type = %d\n", type);
|
mylog("type = %d\n", type);
|
||||||
|
|
||||||
if (stmt->manual_result)
|
if (stmt->manual_result) {
|
||||||
value = QR_get_value_manual(res, stmt->currTuple, lf);
|
value = QR_get_value_manual(res, stmt->currTuple, lf);
|
||||||
|
mylog("manual_result\n");
|
||||||
|
}
|
||||||
else if (globals.use_declarefetch)
|
else if (globals.use_declarefetch)
|
||||||
value = QR_get_value_backend(res, lf);
|
value = QR_get_value_backend(res, lf);
|
||||||
else {
|
else {
|
||||||
@ -857,32 +861,41 @@ ColumnInfoClass *ci;
|
|||||||
|
|
||||||
mylog("copy_and_convert: retval = %d\n", retval);
|
mylog("copy_and_convert: retval = %d\n", retval);
|
||||||
|
|
||||||
// check whether the complete result was copied
|
|
||||||
if(retval == COPY_UNSUPPORTED_TYPE) {
|
switch(retval) {
|
||||||
|
case COPY_OK:
|
||||||
|
break; /* OK, do next bound column */
|
||||||
|
|
||||||
|
case COPY_UNSUPPORTED_TYPE:
|
||||||
stmt->errormsg = "Received an unsupported type from Postgres.";
|
stmt->errormsg = "Received an unsupported type from Postgres.";
|
||||||
stmt->errornumber = STMT_RESTRICTED_DATA_TYPE_ERROR;
|
stmt->errornumber = STMT_RESTRICTED_DATA_TYPE_ERROR;
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
|
|
||||||
} else if(retval == COPY_UNSUPPORTED_CONVERSION) {
|
case COPY_UNSUPPORTED_CONVERSION:
|
||||||
stmt->errormsg = "Couldn't handle the necessary data type conversion.";
|
stmt->errormsg = "Couldn't handle the necessary data type conversion.";
|
||||||
stmt->errornumber = STMT_RESTRICTED_DATA_TYPE_ERROR;
|
stmt->errornumber = STMT_RESTRICTED_DATA_TYPE_ERROR;
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
|
|
||||||
} else if(retval == COPY_RESULT_TRUNCATED) {
|
case COPY_RESULT_TRUNCATED:
|
||||||
/* The result has been truncated during the copy */
|
|
||||||
/* this will generate a SQL_SUCCESS_WITH_INFO result */
|
|
||||||
stmt->errornumber = STMT_TRUNCATED;
|
stmt->errornumber = STMT_TRUNCATED;
|
||||||
stmt->errormsg = "A buffer was too small for the return value to fit in";
|
stmt->errormsg = "The buffer was too small for the result.";
|
||||||
return SQL_SUCCESS_WITH_INFO;
|
return SQL_SUCCESS_WITH_INFO;
|
||||||
|
|
||||||
} else if(retval != COPY_OK) {
|
case COPY_GENERAL_ERROR: /* error msg already filled in */
|
||||||
|
SC_log_error(func, "", stmt);
|
||||||
|
return SQL_ERROR;
|
||||||
|
|
||||||
|
case COPY_NO_DATA_FOUND:
|
||||||
|
SC_log_error(func, "no data found", stmt);
|
||||||
|
return SQL_NO_DATA_FOUND;
|
||||||
|
|
||||||
|
default:
|
||||||
stmt->errormsg = "Unrecognized return value from copy_and_convert_field.";
|
stmt->errormsg = "Unrecognized return value from copy_and_convert_field.";
|
||||||
stmt->errornumber = STMT_INTERNAL_ERROR;
|
stmt->errornumber = STMT_INTERNAL_ERROR;
|
||||||
SC_log_error(func, "", stmt);
|
SC_log_error(func, "", stmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -899,7 +912,7 @@ RETCODE SQL_API SQLExtendedFetch(
|
|||||||
UDWORD FAR *pcrow,
|
UDWORD FAR *pcrow,
|
||||||
UWORD FAR *rgfRowStatus)
|
UWORD FAR *rgfRowStatus)
|
||||||
{
|
{
|
||||||
char *func = "SQLExtendedFetch";
|
static char *func = "SQLExtendedFetch";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
int num_tuples;
|
int num_tuples;
|
||||||
RETCODE result;
|
RETCODE result;
|
||||||
@ -1009,7 +1022,7 @@ RETCODE SQL_API SQLSetPos(
|
|||||||
UWORD fOption,
|
UWORD fOption,
|
||||||
UWORD fLock)
|
UWORD fLock)
|
||||||
{
|
{
|
||||||
char *func = "SQLSetPos";
|
static char *func = "SQLSetPos";
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
sprintf(buf, "SQLSetPos not implemented: irow=%d, fOption=%d, fLock=%d\n", irow, fOption, fLock);
|
sprintf(buf, "SQLSetPos not implemented: irow=%d, fOption=%d, fLock=%d\n", irow, fOption, fLock);
|
||||||
@ -1026,7 +1039,7 @@ RETCODE SQL_API SQLSetScrollOptions(
|
|||||||
SDWORD crowKeyset,
|
SDWORD crowKeyset,
|
||||||
UWORD crowRowset)
|
UWORD crowRowset)
|
||||||
{
|
{
|
||||||
char *func = "SQLSetScrollOptions";
|
static char *func = "SQLSetScrollOptions";
|
||||||
|
|
||||||
SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
|
SC_log_error(func, "Function not implemented", (StatementClass *) hstmt);
|
||||||
return SQL_ERROR;
|
return SQL_ERROR;
|
||||||
@ -1040,12 +1053,11 @@ RETCODE SQL_API SQLSetCursorName(
|
|||||||
UCHAR FAR *szCursor,
|
UCHAR FAR *szCursor,
|
||||||
SWORD cbCursor)
|
SWORD cbCursor)
|
||||||
{
|
{
|
||||||
char *func="SQLSetCursorName";
|
static char *func="SQLSetCursorName";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
mylog("SQLSetCursorName: hstmt=%u, szCursor=%u, cbCursorMax=%d\n",
|
mylog("SQLSetCursorName: hstmt=%u, szCursor=%u, cbCursorMax=%d\n", hstmt, szCursor, cbCursor);
|
||||||
hstmt, szCursor, cbCursor);
|
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -1072,11 +1084,10 @@ RETCODE SQL_API SQLGetCursorName(
|
|||||||
SWORD cbCursorMax,
|
SWORD cbCursorMax,
|
||||||
SWORD FAR *pcbCursor)
|
SWORD FAR *pcbCursor)
|
||||||
{
|
{
|
||||||
char *func="SQLGetCursorName";
|
static char *func="SQLGetCursorName";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
mylog("SQLGetCursorName: hstmt=%u, szCursor=%u, cbCursorMax=%d, pcbCursor=%u\n",
|
mylog("SQLGetCursorName: hstmt=%u, szCursor=%u, cbCursorMax=%d, pcbCursor=%u\n", hstmt, szCursor, cbCursorMax, pcbCursor);
|
||||||
hstmt, szCursor, cbCursorMax, pcbCursor);
|
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
|
@ -13,16 +13,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <string.h> /* for memset */
|
#include <string.h> /* for memset */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -11,15 +11,16 @@
|
|||||||
#define __SOCKET_H__
|
#define __SOCKET_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
#define closesocket(xxx) close(xxx)
|
#define closesocket(xxx) close(xxx)
|
||||||
#define SOCKETFD int
|
#define SOCKETFD int
|
||||||
#else
|
#else
|
||||||
@ -68,7 +69,7 @@ struct SocketClass_ {
|
|||||||
|
|
||||||
|
|
||||||
/* Socket prototypes */
|
/* Socket prototypes */
|
||||||
SocketClass *SOCK_Constructor();
|
SocketClass *SOCK_Constructor(void);
|
||||||
void SOCK_Destructor(SocketClass *self);
|
void SOCK_Destructor(SocketClass *self);
|
||||||
char SOCK_connect_to(SocketClass *self, unsigned short port, char *hostname);
|
char SOCK_connect_to(SocketClass *self, unsigned short port, char *hostname);
|
||||||
void SOCK_get_n_char(SocketClass *self, char *buffer, int len);
|
void SOCK_get_n_char(SocketClass *self, char *buffer, int len);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "statement.h"
|
#include "statement.h"
|
||||||
@ -25,7 +25,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#else
|
#else
|
||||||
@ -35,8 +35,8 @@
|
|||||||
|
|
||||||
extern GLOBAL_VALUES globals;
|
extern GLOBAL_VALUES globals;
|
||||||
|
|
||||||
#ifdef UNIX
|
#ifndef WIN32
|
||||||
#if !HAVE_STRICMP
|
#ifndef HAVE_STRICMP
|
||||||
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
#define stricmp(s1,s2) strcasecmp(s1,s2)
|
||||||
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
|
||||||
#endif
|
#endif
|
||||||
@ -63,23 +63,12 @@ static struct {
|
|||||||
RETCODE SQL_API SQLAllocStmt(HDBC hdbc,
|
RETCODE SQL_API SQLAllocStmt(HDBC hdbc,
|
||||||
HSTMT FAR *phstmt)
|
HSTMT FAR *phstmt)
|
||||||
{
|
{
|
||||||
return _SQLAllocStmt(hdbc, phstmt);
|
static char *func="SQLAllocStmt";
|
||||||
}
|
|
||||||
|
|
||||||
RETCODE SQL_API SQLFreeStmt(HSTMT hstmt,
|
|
||||||
UWORD fOption)
|
|
||||||
{
|
|
||||||
return _SQLFreeStmt(hstmt, fOption);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
RETCODE SQL_API _SQLAllocStmt(HDBC hdbc,
|
|
||||||
HSTMT FAR *phstmt)
|
|
||||||
{
|
|
||||||
char *func="SQLAllocStmt";
|
|
||||||
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
ConnectionClass *conn = (ConnectionClass *) hdbc;
|
||||||
StatementClass *stmt;
|
StatementClass *stmt;
|
||||||
|
|
||||||
|
mylog("%s: entering...\n", func);
|
||||||
|
|
||||||
if( ! conn) {
|
if( ! conn) {
|
||||||
CC_log_error(func, "", NULL);
|
CC_log_error(func, "", NULL);
|
||||||
return SQL_INVALID_HANDLE;
|
return SQL_INVALID_HANDLE;
|
||||||
@ -112,13 +101,13 @@ StatementClass *stmt;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RETCODE SQL_API _SQLFreeStmt(HSTMT hstmt,
|
RETCODE SQL_API SQLFreeStmt(HSTMT hstmt,
|
||||||
UWORD fOption)
|
UWORD fOption)
|
||||||
{
|
{
|
||||||
char *func="SQLFreeStmt";
|
static char *func="SQLFreeStmt";
|
||||||
StatementClass *stmt = (StatementClass *) hstmt;
|
StatementClass *stmt = (StatementClass *) hstmt;
|
||||||
|
|
||||||
mylog("**** enter SQLFreeStmt: hstmt=%u, fOption=%d\n", hstmt, fOption);
|
mylog("%s: entering...hstmt=%u, fOption=%d\n", func, hstmt, fOption);
|
||||||
|
|
||||||
if ( ! stmt) {
|
if ( ! stmt) {
|
||||||
SC_log_error(func, "", NULL);
|
SC_log_error(func, "", NULL);
|
||||||
@ -151,8 +140,6 @@ StatementClass *stmt = (StatementClass *) hstmt;
|
|||||||
SC_unbind_cols(stmt);
|
SC_unbind_cols(stmt);
|
||||||
|
|
||||||
} else if (fOption == SQL_CLOSE) {
|
} else if (fOption == SQL_CLOSE) {
|
||||||
ConnectionClass *conn = stmt->hdbc;
|
|
||||||
|
|
||||||
/* this should discard all the results, but leave the statement */
|
/* this should discard all the results, but leave the statement */
|
||||||
/* itself in place (it can be executed again) */
|
/* itself in place (it can be executed again) */
|
||||||
if (!SC_recycle_statement(stmt)) {
|
if (!SC_recycle_statement(stmt)) {
|
||||||
@ -181,7 +168,7 @@ StatementClass *stmt = (StatementClass *) hstmt;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
StatementClass *
|
StatementClass *
|
||||||
SC_Constructor()
|
SC_Constructor(void)
|
||||||
{
|
{
|
||||||
StatementClass *rv;
|
StatementClass *rv;
|
||||||
|
|
||||||
@ -346,6 +333,8 @@ SC_recycle_statement(StatementClass *self)
|
|||||||
{
|
{
|
||||||
ConnectionClass *conn;
|
ConnectionClass *conn;
|
||||||
|
|
||||||
|
mylog("recycle statement: self= %u\n", self);
|
||||||
|
|
||||||
/* This would not happen */
|
/* This would not happen */
|
||||||
if (self->status == STMT_EXECUTING) {
|
if (self->status == STMT_EXECUTING) {
|
||||||
self->errornumber = STMT_SEQUENCE_ERROR;
|
self->errornumber = STMT_SEQUENCE_ERROR;
|
||||||
@ -540,7 +529,7 @@ char rv;
|
|||||||
|
|
||||||
RETCODE SC_execute(StatementClass *self)
|
RETCODE SC_execute(StatementClass *self)
|
||||||
{
|
{
|
||||||
char *func="SC_execute";
|
static char *func="SC_execute";
|
||||||
ConnectionClass *conn;
|
ConnectionClass *conn;
|
||||||
QResultClass *res;
|
QResultClass *res;
|
||||||
char ok, was_ok, was_nonfatal;
|
char ok, was_ok, was_nonfatal;
|
||||||
@ -553,7 +542,7 @@ Int2 oldstatus, numcols;
|
|||||||
/* The reason is because we can't use declare/fetch cursors without
|
/* The reason is because we can't use declare/fetch cursors without
|
||||||
starting a transaction first.
|
starting a transaction first.
|
||||||
*/
|
*/
|
||||||
if ( ! CC_is_in_trans(conn) && (globals.use_declarefetch || STMT_UPDATE(self))) {
|
if ( ! self->internal && ! CC_is_in_trans(conn) && (globals.use_declarefetch || STMT_UPDATE(self))) {
|
||||||
|
|
||||||
mylog(" about to begin a transaction on statement = %u\n", self);
|
mylog(" about to begin a transaction on statement = %u\n", self);
|
||||||
res = CC_send_query(conn, "BEGIN", NULL, NULL);
|
res = CC_send_query(conn, "BEGIN", NULL, NULL);
|
||||||
@ -618,7 +607,7 @@ Int2 oldstatus, numcols;
|
|||||||
self->result = CC_send_query(conn, self->stmt_with_params, NULL, NULL);
|
self->result = CC_send_query(conn, self->stmt_with_params, NULL, NULL);
|
||||||
|
|
||||||
// If we are in autocommit, we must send the commit.
|
// If we are in autocommit, we must send the commit.
|
||||||
if (CC_is_in_autocommit(conn) && STMT_UPDATE(self)) {
|
if ( ! self->internal && CC_is_in_autocommit(conn) && STMT_UPDATE(self)) {
|
||||||
CC_send_query(conn, "COMMIT", NULL, NULL);
|
CC_send_query(conn, "COMMIT", NULL, NULL);
|
||||||
CC_set_no_trans(conn);
|
CC_set_no_trans(conn);
|
||||||
}
|
}
|
||||||
@ -671,7 +660,9 @@ Int2 oldstatus, numcols;
|
|||||||
self->errornumber = STMT_EXEC_ERROR;
|
self->errornumber = STMT_EXEC_ERROR;
|
||||||
self->errormsg = "Error while executing the query";
|
self->errormsg = "Error while executing the query";
|
||||||
}
|
}
|
||||||
CC_abort(conn);
|
|
||||||
|
if ( ! self->internal)
|
||||||
|
CC_abort(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->errornumber == STMT_OK)
|
if (self->errornumber == STMT_OK)
|
||||||
@ -691,6 +682,7 @@ SC_log_error(char *func, char *desc, StatementClass *self)
|
|||||||
{
|
{
|
||||||
if (self) {
|
if (self) {
|
||||||
qlog("STATEMENT ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
qlog("STATEMENT ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
||||||
|
mylog("STATEMENT ERROR: func=%s, desc='%s', errnum=%d, errmsg='%s'\n", func, desc, self->errornumber, self->errormsg);
|
||||||
qlog(" ------------------------------------------------------------\n");
|
qlog(" ------------------------------------------------------------\n");
|
||||||
qlog(" hdbc=%u, stmt=%u, result=%u\n", self->hdbc, self, self->result);
|
qlog(" hdbc=%u, stmt=%u, result=%u\n", self->hdbc, self, self->result);
|
||||||
qlog(" manual_result=%d, prepare=%d, internal=%d\n", self->manual_result, self->prepare, self->internal);
|
qlog(" manual_result=%d, prepare=%d, internal=%d\n", self->manual_result, self->prepare, self->internal);
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
#define __STATEMENT_H__
|
#define __STATEMENT_H__
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IODBC
|
#ifndef WIN32
|
||||||
#include "iodbc.h"
|
#include "iodbc.h"
|
||||||
#include "isql.h"
|
#include "isql.h"
|
||||||
#else
|
#else
|
||||||
@ -179,7 +179,7 @@ struct StatementClass_ {
|
|||||||
#define STMT_FREE_PARAMS_DATA_AT_EXEC_ONLY 1
|
#define STMT_FREE_PARAMS_DATA_AT_EXEC_ONLY 1
|
||||||
|
|
||||||
/* Statement prototypes */
|
/* Statement prototypes */
|
||||||
StatementClass *SC_Constructor();
|
StatementClass *SC_Constructor(void);
|
||||||
char SC_Destructor(StatementClass *self);
|
char SC_Destructor(StatementClass *self);
|
||||||
int statement_type(char *statement);
|
int statement_type(char *statement);
|
||||||
char parse_statement(StatementClass *stmt);
|
char parse_statement(StatementClass *stmt);
|
||||||
@ -194,16 +194,5 @@ RETCODE SC_execute(StatementClass *stmt);
|
|||||||
void SC_free_params(StatementClass *self, char option);
|
void SC_free_params(StatementClass *self, char option);
|
||||||
void SC_log_error(char *func, char *desc, StatementClass *self);
|
void SC_log_error(char *func, char *desc, StatementClass *self);
|
||||||
|
|
||||||
RETCODE SQL_API _SQLAllocStmt(HDBC hdbc, HSTMT FAR *phstmt);
|
|
||||||
RETCODE SQL_API _SQLFreeStmt(HSTMT hstmt, UWORD fOption);
|
|
||||||
RETCODE SQL_API _SQLExecDirect(HSTMT hstmt, UCHAR FAR *szSqlStr, SDWORD cbSqlStr);
|
|
||||||
RETCODE SQL_API _SQLFetch(HSTMT hstmt);
|
|
||||||
RETCODE SQL_API _SQLGetData(
|
|
||||||
HSTMT hstmt,
|
|
||||||
UWORD icol,
|
|
||||||
SWORD fCType,
|
|
||||||
PTR rgbValue,
|
|
||||||
SDWORD cbValueMax,
|
|
||||||
SDWORD FAR *pcbValue);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
void set_tuplefield_null(TupleField *tuple_field)
|
void set_tuplefield_null(TupleField *tuple_field)
|
||||||
{
|
{
|
||||||
tuple_field->len = 0;
|
tuple_field->len = 0;
|
||||||
tuple_field->value = strdup("");
|
tuple_field->value = NULL; // strdup("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_tuplefield_string(TupleField *tuple_field, char *string)
|
void set_tuplefield_string(TupleField *tuple_field, char *string)
|
||||||
@ -37,6 +37,7 @@ void set_tuplefield_int2(TupleField *tuple_field, Int2 value)
|
|||||||
{
|
{
|
||||||
char buffer[10];
|
char buffer[10];
|
||||||
|
|
||||||
|
|
||||||
sprintf(buffer,"%d", value);
|
sprintf(buffer,"%d", value);
|
||||||
|
|
||||||
tuple_field->len = strlen(buffer)+1;
|
tuple_field->len = strlen(buffer)+1;
|
||||||
|
@ -32,9 +32,9 @@ struct TupleNode_ {
|
|||||||
but these handle automatic NULL determination and call set_tuplefield_null()
|
but these handle automatic NULL determination and call set_tuplefield_null()
|
||||||
if appropriate for the datatype (used by SQLGetTypeInfo).
|
if appropriate for the datatype (used by SQLGetTypeInfo).
|
||||||
*/
|
*/
|
||||||
#define set_nullfield_string(FLD, VAL) (VAL ? set_tuplefield_string(FLD, VAL) : set_tuplefield_null(FLD))
|
#define set_nullfield_string(FLD, VAL) ((VAL) ? set_tuplefield_string(FLD, (VAL)) : set_tuplefield_null(FLD))
|
||||||
#define set_nullfield_int2(FLD, VAL) (VAL != -1 ? set_tuplefield_int2(FLD, VAL) : set_tuplefield_null(FLD))
|
#define set_nullfield_int2(FLD, VAL) ((VAL) != -1 ? set_tuplefield_int2(FLD, (VAL)) : set_tuplefield_null(FLD))
|
||||||
#define set_nullfield_int4(FLD, VAL) (VAL != -1 ? set_tuplefield_int4(FLD, VAL) : set_tuplefield_null(FLD))
|
#define set_nullfield_int4(FLD, VAL) ((VAL) != -1 ? set_tuplefield_int4(FLD, (VAL)) : set_tuplefield_null(FLD))
|
||||||
|
|
||||||
void set_tuplefield_null(TupleField *tuple_field);
|
void set_tuplefield_null(TupleField *tuple_field);
|
||||||
void set_tuplefield_string(TupleField *tuple_field, char *string);
|
void set_tuplefield_string(TupleField *tuple_field, char *string);
|
||||||
|
Reference in New Issue
Block a user