--- /dev/null
+Author: Pierangelo Masarati <ando@OpenLDAP.org>
+
+Back-sql can be tested with test031-sql; it requires a bit of work to get
+everything up and running appropriately.
+
+This document briefly describes the steps that are required to prepare
+a quick'n'dirty installation of back-sql and of the related RDBMS
+and ODBC; Examples are provided, but by no means they pretent
+to represent an exaustive source of info about how to setup the ODBC;
+refer to the docs for any problem or detail.
+
+Currently, the system has been tested with PostgreSQL and with MySQL;
+basic support and test data for other RDBMSes is in place, but as of
+today (August 2004) it's totally untested. If you succeed in running
+any of the other RDBMSes, please provide feedback about any required
+change either in the code or in the test scripts by means of OpenLDAP's
+Issue Tracking System (http://www.openldap.org/its/).
+
+1) slapd must be compiled with back-sql support, i.e. configure
+with --enable-sql switch. This requires an implementation of the ODBC
+to be installed.
+
+2) The ODBC must be set up appropriately, by editing the odbc.ini file
+in /etc/ (or wherever your installation puts it) and, if appropriate,
+the odbcinst.ini file. Note: you can also use custom odbc.ini and
+odbcinst.ini files, provided you export in ODBCINI the full path to the
+odbc.ini file, and in ODBCSYSINI the directory where the odbcinst.ini
+file resides.
+Relevant info for our test setup is highlighted with '<===' on the right.
+
+2.1) PostgreSQL
+
+2.1.1) Add to the odbc.ini file a block of the form
+
+[example] <===
+Description = Example for OpenLDAP's back-sql
+Driver = PostgreSQL
+Trace = No
+Database = example <===
+Servername = localhost
+UserName = manager <===
+Password = secret <===
+Port = 5432
+;Protocol = 6.4
+ReadOnly = No
+RowVersioning = No
+ShowSystemTables = No
+ShowOidColumn = No
+FakeOidIndex = No
+ConnSettings =
+
+2.1.2) Add to the odbcinst.ini file a block of the form
+
+[PostgreSQL]
+Description = ODBC for PostgreSQL
+Driver = /usr/lib/libodbcpsql.so
+Setup = /usr/lib/libodbcpsqlS.so
+FileUsage = 1
+
+2.2) MySQL
+
+2.2.1) Add to the odbc.ini file a block of the form
+
+[example] <===
+Description = Example for OpenLDAP's back-sql
+Driver = MySQL
+Trace = No
+Database = example <===
+Servername = localhost
+UserName = manager <===
+Password = secret <===
+ReadOnly = No
+RowVersioning = No
+ShowSystemTables = No
+ShowOidColumn = No
+FakeOidIndex = No
+ConnSettings =
+SOCKET = /var/lib/mysql/mysql.sock
+
+2.2.2) Add to the odbcinst.ini file a block of the form
+
+[MySQL]
+Description = ODBC for MySQL
+Driver = /usr/lib/libmyodbc.so
+FileUsage = 1
+
+3) The RDBMS must be setup; examples are provided for my installations
+of PostgreSQL and MySQL, but details may change; other RDBMSes should
+be configured in a similar manner, you need to find out the details by
+reading their documentation.
+
+3.1) PostgreSQL
+
+3.1.1) Start the server
+on RedHat:
+[root@localhost]# service postgresql start
+on other systems: read the docs...
+
+3.1.2) Create the database:
+[root@localhost]# su - postgres
+[postgres@localhost]$ createdb example
+
+3.1.3) Create the user:
+[root@localhost]# su - postgres
+[postgres@localhost]$ psql example
+example=> create user manager with password 'secret';
+example=> <control-D>
+
+3.1.4) Populate the database:
+[root@localhost]# cd $SOURCES/servers/slapd/back-sql/rdbms_depend/pgsql/
+[root@localhost]# psql -U manager -W example
+example=> <control-D>
+[root@localhost]# psql -U manager example < backsql_create.sql
+[root@localhost]# psql -U manager example < testdb_create.sql
+[root@localhost]# psql -U manager example < testdb_data.sql
+[root@localhost]# psql -U manager example < testdb_metadata.sql
+
+3.1.5) Run the test:
+[root@localhost]# cd $SOURCES/tests
+[root@localhost]# SLAPD_USE_SQL=postgres ./run test031
+
+3.2) MySQL
+
+3.2.1) Start the server
+on RedHat:
+[root@localhost]# service mysqld start
+on other systems: read the docs...
+
+3.2.2) Create the database:
+[root@localhost]# mysqladmin -u root -p create example
+(hit <return> for the empty password).
+
+3.2.3) Create the user:
+[root@localhost]# mysql -u root -p example
+(hit <return> for the empty password)
+mysql> grant all privileges on *.* \
+ to 'manager'@'localhost' identified by 'secret' with grant option;
+mysql> exit;
+
+3.2.4) Populate the database:
+[root@localhost]# cd $SOURCES/servers/slapd/back-sql/rdbms_depend/mysql/
+[root@localhost]# mysql -u manager -p example < backsql_create.sql
+[root@localhost]# mysql -u manager -p example < testdb_create.sql
+[root@localhost]# mysql -u manager -p example < testdb_data.sql
+[root@localhost]# mysql -u manager -p example < testdb_metadata.sql
+
+3.2.5) Run the test:
+[root@localhost]# cd $SOURCES/tests
+[root@localhost]# SLAPD_USE_SQL=mysql ./run test031
+
+4) Cleanup:
+The basic portion of the test is readonly; this is performed by all RDBMSes.
+The secondary part involves write operations. Currently, the write
+portion of the test is enabled only for PostgreSQL. Note that after
+a successful run of the write portion, the database is no longer in the
+correct state to restart the test, and step 3.X.4 needs to be re-run first.
+
-# refldap://localhost/o=example,c=ru??sub
-
-dn: cn=Torvlobnor Puzdoy,o=Example,c=RU
+dn: cn=Pierangelo Masarati,o=Example,c=RU
objectClass: inetOrgPerson
-cn: Torvlobnor Puzdoy
-telephoneNumber: 545-4563
-sn: Torvlobnor Puzdoy
-documentIdentifier: documentTitle=book1,o=Example,c=RU
+cn: Pierangelo Masarati
+telephoneNumber: +39 333 ZZZ 1234
+givenName: Pierangelo
+sn: Masarati
+
+# refldap://localhost/o=Example,c=RU??sub
dn: cn=Mitya Kovalev,o=Example,c=RU
objectClass: inetOrgPerson
+objectClass: posixAccount
cn: Mitya Kovalev
telephoneNumber: 332-2334
telephoneNumber: 222-3234
-sn: Mitya Kovalev
+telephoneNumber: +1 800 123 4567
+givenName: Mitya
+sn: Kovalev
documentIdentifier: documentTitle=book1,o=Example,c=RU
documentIdentifier: documentTitle=book2,o=Example,c=RU
description: abstract1
documentTitle: book1
documentAuthor: cn=Mitya Kovalev,o=Example,c=RU
-documentAuthor: cn=Torvlobnor Puzdoy,o=Example,c=RU
dn: o=Example,c=RU
objectClass: organization
echo "### servers/slapd/back-sql/rdbms_depend/* files."
echo "### Set SLAPD_USE_SQL to the desired RDBMS to enable this test;"
echo "### Supported RDBMSes are: mysql,postgres"
+echo "### Set SLAPD_USE_SQLWRITE=yes to enable the write test"
+echo "### See servers/slapd/back-sql/rdbms_depend/README for more "
+echo "### details on how to set up the RDBMS and the ODBC"
if test $BACKSQL = "sqlno" ; then
echo "SQL backend not available, test skipped"
fi
echo "Testing modify, add, and delete..."
-case ${RDBMS} in
- # list here the RDBMSes whose mapping allows writes
+if test "${RDBMSWRITE}" != "yes"; then
+ echo "write test disabled; set SLAPD_USE_SQLWRITE=yes to enable"
+else
+ case ${RDBMS} in
+ # list here the RDBMSes whose mapping allows writes
postgres)
MANAGERDN="cn=Manager,${BASEDN}"
$LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
$TESTOUT 2>&1 << EOMODS
version: 1
-# LEADING COMMENT AND WHITE SPACE
-
dn: cn=Mitya Kovalev,${BASEDN}
-# EMBEDDED COMMENT
changetype: modify
add: telephoneNumber
telephoneNumber: +1 800 123 4567
dn: cn=Pierangelo Masarati,${BASEDN}
changetype: add
-# EMBEDDED COMMENT
- CONTINUED
objectClass: inetOrgPerson
cn: Pierangelo Masarati
sn: Masarati
givenName: Pierangelo
telephoneNumber: +39 02 XXXX YYYY
+telephoneNumber: +39 02 XXXX ZZZZ
+
+dn: cn=Pierangelo Masarati,${BASEDN}
+changetype: modify
+delete: telephoneNumber
+telephoneNumber: +39 02 XXXX YYYY
+-
+add: telephoneNumber
+telephoneNumber: +39 333 ZZZ 1234
+-
dn: cn=Torvlobnor Puzdoy,${BASEDN}
changetype: delete
*)
echo "apparently ${RDBMS} does not support writes; skipping..."
;;
-esac
+ esac
+fi
test $KILLSERVERS != no && kill -HUP $KILLPIDS