                            Libzdb
                                       
 Introduction
 ------------

 Libzdb is a database library with thread-safe connection pooling. The
 library can connect transparently to multiple database systems. It has
 zero runtime configuration and connection is specified via a URL scheme.


 System requirements
 -------------------

 * Memory and Disk space

   A minimum of 1 megabytes RAM are required and around 700KB of free
   disk space. You may need more RAM depending on how many Connections
   the library should create.

 * C11 Compiler and Build System

   You will need a C11 compiler installed to build the library. The 
   GNU C compiler (GCC) from the Free Software Foundation (FSF) is
   recommended. In addition, your PATH must contain basic build tools
   such as make and database configuration scripts for MySQL and 
   PostgreSQL, that is, mysql_config and pg_config respectively.
   
 * Database systems
 
   This Software supports the following database systems, 
     - MySQL         - version 4.1 and later
     - PostgreSQL    - version 8.0 and later
     - SQLite        - version 3.0 and later
     - Oracle        - version 10 and later
   Client libraries for at least one of these database systems must
   be installed on the host on which this Software will be built.
 
 
 Installation
 ------------
 
 This library utilize the GNU auto-tools and provided the requirements
 above are satisfied, building the library is conducted via the
 standard;

  ./configure
  make
  make install 
 
 Use ./configure --help for build and install options. By default, the
 library is built with support for MySQL, PostgreSQL and SQLite. You may
 change this with the --without-<database> options to ./configure. E.g.
 --without-mysql, --without-postgresql or --without-sqlite. For Oracle,
 if you have Oracle installed locally, try configure --with-oci=<path>
 otherwise download Oracle Instant Client library and header files and
 use --with-oci-lib=<oci>/lib and --with-oci-include=<oci>/include
 
 To verify the library and run unit tests, do 'make verify'. You may
 also want to take a look at test/select.c for an example on how to use
 the library.
  
 Note that unit tests cannot be built if the --enable-protected
 configure switch was used. This switch is used to package protect
 non-API objects in the library. It is strongly recommended to build the
 library with --enable-protected as it will be faster and reduce the risk
 for name symbol interposing


 API Documentation
 -----------------
 
 The directory doc/api-docs/ and index.html contains the full API
 documentation for the library, generated by Doxygen. Start by reading
 the documentation for ConnectionPool.h
  

 Exceptions handling
 -------------------
 
 The library implements an elegant solution for thread-safe exceptions
 handling in C. Use of exceptions frees programmers from the tedious return
 code idiom for dealing with errors. The API documents every method that
 can throw an exception. Methods that can throw an exception should be
 called from inside a try-block.
  

 Link and include
 ----------------
 
 Include this interface in your C code to import the libzdb API;

 #include <zdb.h>
 
 Compile and link a C program with libzdb;

 gcc -o select select.c -L/<prefix>/lib -lzdb -I/<prefix>/include/zdb

 Libzdb can be used directly in a C++ or in an Objective-C++ project.
 Instead of including <zdb.h>, include <zdbpp.h> which is a C++20 API
 for idiomatic usage of libzdb in your C++ project.

 Compile and link a C++ program with libzdb;

 g++ -o select select.cpp -std=c++20 -L/<prefix>/lib -lzdb -I/<prefix>/include/zdb

 On some systems you may have to explicit set LD_LIBRARY_PATH if
 libzdb was installed in a non-standard location

  
 License Notes
 -------------

 This Software product is licensed under the GNU General Public License
 version 3. You can use this Software product free of charge to develop,
 use and distribute Open Source application programs, including reusable
 components and other software that link with the Software. You may also
 use and modify any example source code included with the Software for
 any purpose.
  
 See the file COPYING accompanying the Software for details. 


 Reporting a bug
 ---------------

 If you believe you have found a bug, please use the issue tracker 
 mentioned at https://www.tildeslash.com/libzdb/#contact to report the
 problem. Remember to include the necessary information that will enable 
 us to understand and reproduce this problem. Alternatively, you can
 send us an email at bugs-libzdb@tildeslash.com


 Questions and support
 ---------------------

 If you have questions or comments about the software or documentation 
 please subscribe to the libzdb general mailing list and post your 
 questions there. 
 
 https://tildeslash.com/mailman3/postorius/lists/libzdb-general.tildeslash.com/


 Contributing
 ------------
 
 You are welcome to contribute to this project, but please note that
 an electronically signed CLA is required to be on file before any Pull 
 Request or patches are accepted or you are given commit rights to the 
 project. To sign, go to https://tildeslash.com/cla/


 Contact information
 -------------------

 Libzdb is a product of Tildeslash Ltd. a company registered in
 Norway and in United Kingdom.
 
 For further information about this Software, please use the following 
 contact information.

 E-mail:
   info@tildeslash.com

 Internet:
   https://www.tildeslash.com/libzdb/
   

 Acknowledgments
 ---------------

 The design of this library was inspired by principles put forth by 
 David R. Hanson <drh@drhanson.net> in his excellent book 
 "C Interfaces and Implementations". You can learn more about this 
 book here http://www.cs.princeton.edu/software/cii/

