The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
DBD::Solid -- DBD module interfacing the SOLID database.

   $Id: README,v 1.9 1998/02/24 00:34:39 tom Exp $
   Copyright (c) 1997, 1998  Thomas K. Wenrich
   portions Copyright (c) 1994,1995,1996  Tim Bunce

   You may distribute under the terms of either the GNU General Public
   License or the Artistic License, as specified in the Perl README file.

   PLEASE READ THE ENTIRE README FILE CAREFULLY !

*  WARNING: THIS IS MOSTLY ALPHA SOFTWARE. Your mileage may vary.       *

*  Most of the code (and some parts of this README) were stolen from the 
*  DBD-Oracle distribution. 
*  However, any bugs and errors herein are most likely my fault, not 
*  those of Tim Bunce.

IMPORTANT NOTICE:
    Since July 1997 a working alpha release of the DBD::ODBC
    module is available. 
    It's most likely that there will be *NO* further development 
    on DBD::Solid's C code as soon as DBD::ODBC becomes stable
    and supports the features DBD::Solid has today.
    However, it might be possible that there will be a DBD::Solid
    module adding some Solid specific functions to DBD::ODBC and
    linking DBD::ODBC against Solid's client library.

*BEFORE* BUILDING, TESTING AND INSTALLING this you will need to:

    Build, test and install Perl 5 (at least 5.003).
    It is very important to TEST it and INSTALL it!

    Build, test and install the DBI module (at least DBI 0.86).
    It is very important to TEST it and INSTALL it!

    Remember to *read* the DBI README file!

    Install the SOLID RDBMS software.

    Install the SOLID SQL API files somewhere.
	Makefile.PL searches those files
	   1. below the directory pointed to by the SOLIDDIR environment
	      variable.
	   On UNIX:
              2. below the home directory of the 'solid' user.
	      3. below /usr/local.
	   On MSWin32 platforms:
	      2. on drive C:\

    When you want to use dynamic loading on UNIX machines, create a hard 
    or symbolic link within the directory where the solid library lives 
    E.g. 
	cd /foo/bar/solid/lib
    	ln -s solcli.a libsolcli.a
    On MSWin32, a dynamic lib will be built by default.

BUILDING:
On UNIX:
	perl Makefile.PL
	make
On MSWin32/Visual C/nmake:
	REM - ensure the Visual C environment is set:
	CALL "D:\Program Files\DevStudio\vc\bin\vcvars32"
	REM - set SOLIDDIR environment (see above)
	set SOLIDDIR=c:\solid
	REM - build
	perl Makefile.PL
	nmake

	The file BUILD.BAT contains - as example - all necessary
	definitions to build, test and install the Win32 version.

Note that since DBD::Solid-0.07 the Makefile.PL will try to 
build a dynamic loaded extension (on systems supporting this),
provided you created the link to the library (as described above).

Just in case the dynloaded DBD::Solid doesn't behave like expected
(I still don't feel real good about loading binaries made without -fpic
dynamically, although there was no error report at all about this issue), 
you may want to build a static binary (either remove the link you created 
so Makefile.PL doesn't find a libxxxxxx.a and make, make test as usual
OR run `perl Makefile.PL LINKTYPE=static' and make, make test).

When you build static, don't forget that all the DBD::Solid code
lives inside the perl binary created during 'make test'. You will
need to copy the new perl binary somewhere in /usr/bin or simply 
do what you are told during 'make': 
	make -f makefile.aperl install_perl

If you have problems see the 'IF YOU HAVE PROBLEMS' section below
and the "OPERATING SYSTEM NOTES" section at the end of this file.

If it builds without error you can then run the tests. For the
main test to work it must be able to connect to a SOLID database.

Don't worry about most warnings, specifically "end-of-loop code not
reached", "ANSI C forbids braced-groups within expressions", "cast
increases required alignment of target type".

TESTING
	
    The tests will work either with the 'new style' environment
    variables DBI_DSN, DBI_USER, DBI_PASS introduced with DBI 0.86.
    See the DBI documentation for details.

    'new style' DBI_DSN examples:
    	DBI_DSN="dbi:Solid:"
	DBI_DSN="DBI:Solid:sales_db"
	DBI_DSN="DBI:Solid:my very own giant database"
	DBI_DSN="DBI:Solid:TCP/IP myhost.mydomain 1313"

    The supplied test will connect to the database using the value of the
    SOLID_USER environment variable so you should set that to the correct
    value before starting the test. Don't forget to CREATE the user (see
    SOLID Server documentation) when you aren't using an existing 
    database user.

    When you want to use a remote SOLID server or have more than one
    SOLID Server running then you must set the SOLID_DSN environment
    variable to connect to the database. 

    UNIX (bourne shell) example:
	prompt> SOLID_USER="perltest perltest"
	prompt> SOLID_DSN="TCP/IP myhost.mydomain 1313"
	prompt> export SOLID_USER SOLID_DSN

    MSWin32 example:
	C:\> set SOLID_USER=perltest/perltest
	C:\> set SOLID_DSN="TCP/IP myhost.mydomin 1313"

    Test your settings by connecting to the database using the solsql
    tool supplied with SOLID:

	prompt> solsql $SOLID_DSN $SOLID_USER

    This should connect you to the SOLID server. Once you can do
    that then you can test DBD::Solid knowing that it should work.

	make test
	make test TEST_VERBOSE=1   (if any of the t/* tests fail)

	make install 		   (if the tests look okay)

    TEST NOTES:
	1. Most of the test scripts use a common subroutine (in
	   t/testenv.pm) to obtain information about the database 
	   connection. To start the tests _without_ running 'make', you 
	   may either imitate the way a 'make test' calls t/*.t (e.g. 
	   perl t/02base.t) or modify the scripts so that testenv() 
	   is not longer used or within the scripts.
	2. The tests aren't self contained; instead, they rely on the
	   existance of tables created while running t/02base.t.
	   Because these test tables are removed by t/99drop.t,
	   they must be recreated by running t/02base.t before
	   trying one of the later test scripts.

IF YOU HAVE PROBLEMS:

Do not hand edit the generated Makefile unless you are completely sure
you understand the implications! Always try to make changes via the
Makefile.PL command line and/or editing the Makefile.PL.

You should not need to make any changes. If you do *please* let me
know so that I can try to make it automatic in a later release.

Please don't post problems to comp.lang.perl.misc or perl5-porters.
This software is supported via the dbi-users mailing list.  For more
information and to keep informed about progress you can join the a
mailing list via http:www.fugue.com/dbi (if you are unable to use the
web you can subscribe by sending a message to dbi-request@fugue.com, it
may take a few days to be processed).

Please post details of any problems (or changes you needed to make) to
dbi-users@fugue.com and CC them to me at wenrich@ping.at. But note...

** IT IS IMPORTANT TO INCLUDE THE FOLLOWING INFORMATION:

1. A complete log of a all steps of the build, e.g.:

	perl Makefile.PL           (do a make realclean first)
	make
	make test
	make test TEST_VERBOSE=1   (if any tests fail)

2. Full details of which software you are using:

	* Version of the operating system 
	   (on Linux: Kernel and library versions)
	* Solid versions (of server and development system)
	* Perl version (the output of perl -V)

It is important to check that you are using the latest version before
posting. If you're not then I'm *very* likely to simply say "upgrade to
the latest". You would do yourself a favour by upgrading beforehand.

Please remember that I'm _very_ busy. Try to help yourself first,
then try to help me help you by following these guidelines carefully.

Regards,
Thomas.

===============================================================================
OPERATING SYSTEM NOTES:

It's quite possible that Makefile.PL misses something for the
special system/perl/solid version combination you use. The
most common problems are:

Linker problems:
 (1) The linker barfs at you, saying something about 'unresolved
     symbols'. 
       Try to compile and link the examples coming with the
       client library from Solid.
       When you can't manage to build Solid's examples, Solid tech 
       support should be able to help you.
       When Solid's examples are working fine, you may try to
       modify Makefile.pl, adding the libraries/switches/defines
       you found while building the examples.

 (2) Perl's Dynloader tells you it "Can't load .../Solid.so", 
     followed [possible] by messages about unresolved symbols 
     called 'SQLAllocEnv' and other 'SQLxxxx' symbols.
       This is also a linker problem. You may try to build a
       static perl binary; if this also fails, try (1).

In general, you may try to use another version of the Solid 
client library.

Solaris:
	Some Solaris versions(2.5.1 and 2.4) are reported to have 
	problems with the Solid v2.2 development system.
	As a workaround, you may use the 2.1 Solid libraries found
	on URL ftp:ftp.solidtech.com/pub/demos/2.1/sd21sun.zip.

SCO 3.2 (the COFF based SCO)
	Dynamic linking isn't possible.

	The Microsoft compiler coming with the SCO Development systems 
	has some bugs, causing 'internal compiler errors' and core dumps 
	with some of the complex expressions used by DBD,DBI and perl.
	Sometimes it helps to disable optimizing (add 'OPTIMIZE' = '-Od' 
	to the %opts hash in Makefile.PL).

IRIX:
	With irix 5.3 there seem to be problems connecting to a Solid 
	server via tcp/ip. irix 6.2 is reported to work fine, using
	the Solid 2.1 client library.

	The perl coming with irix 6.3 (the SGI freeware CD) might not 
	be compatible to Solid's client libraries (the Solid lib is  
	built using -w32, perl is not).
	Rebuild perl from the sources, using the '-w32' compile switch,
	and link static. The also required '-lpthread' switch should be 
	generated by Makefile.PL.

SOLID NOTES:

	Solid server versions < 2.20.017 may have broken autocommit 
	behaviour (changes to tables within a solid procedure MAY 
	be rolled back).

	Solutions:
		1. (preferred) upgrade - it doesn't hurt.
		2. Upgrade!!!
		3. You may add -DSOL22_AUTOCOMMIT_BUG to the 'defines' 
		   on top of Makefile.PL, causing DBD::Solid to
		   do the AutoCommit.

===============================================================================
Examples and other info:

All the tests in the t/ subdirectory ARE examples of DBI usage.

SOLID 'home page': http://www.solid.fi

DBI 'home page': http://www.hermetica.com/technologia/DBI

Master archive site for Perl DB information:
    ftp://ftp.demon.co.uk/pub/perl/db/

Searchable index of the dbi-users mailing list:
	http://www.coe.missouri.edu/~faq/lists/dbiusers/

End.