]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/init.c
Add link to FAQ entry on BDB tuning
[openldap] / servers / slapd / back-sql / init.c
index 1fd226586a0b84d5c1fac7f2eae17dea863b2f2b..a8fc074795cff9ec07f85f39addc72dbc797227a 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2005 The OpenLDAP Foundation.
+ * Copyright 1999-2006 The OpenLDAP Foundation.
  * Portions Copyright 1999 Dmitry Kovalev.
  * Portions Copyright 2002 Pierangelo Masarati.
  * All rights reserved.
@@ -97,17 +97,23 @@ backsql_db_init(
        BackendDB       *bd )
 {
        backsql_info    *bi;
+       int             rc = 0;
  
        Debug( LDAP_DEBUG_TRACE, "==>backsql_db_init()\n", 0, 0, 0 );
-       bi = (backsql_info *)ch_malloc( sizeof( backsql_info ) );
-       memset( bi, '\0', sizeof( backsql_info ) );
+
+       bi = (backsql_info *)ch_calloc( 1, sizeof( backsql_info ) );
        ldap_pvt_thread_mutex_init( &bi->sql_dbconn_mutex );
        ldap_pvt_thread_mutex_init( &bi->sql_schema_mutex );
-       backsql_init_db_env( bi );
+
+       if ( backsql_init_db_env( bi ) != SQL_SUCCESS ) {
+               rc = -1;
+       }
 
        bd->be_private = bi;
+
        Debug( LDAP_DEBUG_TRACE, "<==backsql_db_init()\n", 0, 0, 0 );
-       return 0;
+
+       return rc;
 }
 
 int
@@ -218,8 +224,8 @@ backsql_db_open(
        SQLHDBC         dbh = SQL_NULL_HDBC;
        struct berbuf   bb = BB_NULL;
 
-       char            opbuf[ OPERATION_BUFFER_SIZE ];
-       Operation*      op = (Operation *)opbuf;
+       OperationBuffer opbuf;
+       Operation*      op = (Operation *) &opbuf;
        
        Debug( LDAP_DEBUG_TRACE, "==>backsql_db_open(): "
                "testing RDBMS connection\n", 0, 0, 0 );
@@ -329,7 +335,7 @@ backsql_db_open(
                         * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%',?))
                         */
 
-                       backsql_strfcat( &bb, "blbbb",
+                       backsql_strfcat_x( &bb, NULL, "blbbb",
                                        &bi->sql_upper_func,
                                        (ber_len_t)STRLENOF( "(ldap_entries.dn) LIKE " ),
                                                "(ldap_entries.dn) LIKE ",
@@ -343,7 +349,7 @@ backsql_db_open(
                         * ldap_entries.dn LIKE CONCAT('%',?)
                         */
 
-                       backsql_strfcat( &bb, "lb",
+                       backsql_strfcat_x( &bb, NULL, "lb",
                                        (ber_len_t)STRLENOF( "ldap_entries.dn LIKE " ),
                                                "ldap_entries.dn LIKE ",
                                        &concat );
@@ -367,7 +373,7 @@ backsql_db_open(
                         * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%,',?))
                         */
 
-                       backsql_strfcat( &bb, "blbl",
+                       backsql_strfcat_x( &bb, NULL, "blbl",
                                        &bi->sql_upper_func,
                                        (ber_len_t)STRLENOF( "(ldap_entries.dn)=" ),
                                                "(ldap_entries.dn)=",
@@ -380,7 +386,7 @@ backsql_db_open(
                         * ldap_entries.dn LIKE CONCAT('%,',?)
                         */
 
-                       backsql_strfcat( &bb, "l",
+                       backsql_strfcat_x( &bb, NULL, "l",
                                        (ber_len_t)STRLENOF( "ldap_entries.dn=?" ),
                                                "ldap_entries.dn=?");
                }
@@ -491,20 +497,20 @@ backsql_db_open(
        if ( bi->sql_id_query == NULL ) {
                /* no custom id_query provided */
                if ( bi->sql_upper_func.bv_val == NULL ) {
-                       backsql_strcat( &bb, backsql_id_query, "dn=?", NULL );
+                       backsql_strcat_x( &bb, NULL, backsql_id_query, "dn=?", NULL );
 
                } else {
                        if ( BACKSQL_HAS_LDAPINFO_DN_RU( bi ) ) {
-                               backsql_strcat( &bb, backsql_id_query,
+                               backsql_strcat_x( &bb, NULL, backsql_id_query,
                                                "dn_ru=?", NULL );
                        } else {
                                if ( BACKSQL_USE_REVERSE_DN( bi ) ) {
-                                       backsql_strfcat( &bb, "sbl",
+                                       backsql_strfcat_x( &bb, NULL, "sbl",
                                                        backsql_id_query,
                                                        &bi->sql_upper_func, 
                                                        (ber_len_t)STRLENOF( "(dn)=?" ), "(dn)=?" );
                                } else {
-                                       backsql_strfcat( &bb, "sblbcb",
+                                       backsql_strfcat_x( &bb, NULL, "sblbcb",
                                                        backsql_id_query,
                                                        &bi->sql_upper_func, 
                                                        (ber_len_t)STRLENOF( "(dn)=" ), "(dn)=",
@@ -522,7 +528,7 @@ backsql_db_open(
         */
        BER_BVZERO( &bb.bb_val );
        bb.bb_len = 0;
-       backsql_strfcat( &bb, "sbsb",
+       backsql_strfcat_x( &bb, NULL, "sbsb",
                        "SELECT COUNT(distinct subordinates.id) "
                        "FROM ldap_entries,ldap_entries ",
                        &bi->sql_aliasing, "subordinates "
@@ -535,7 +541,7 @@ backsql_db_open(
         */
        BER_BVZERO( &bb.bb_val );
        bb.bb_len = 0;
-       backsql_strfcat( &bb, "sbbsbsbbsb",
+       backsql_strfcat_x( &bb, NULL, "sbbsbsbbsb",
                        " ", &bi->sql_aliasing, &bi->sql_aliasing_quote,
                        "objectClass", &bi->sql_aliasing_quote,
                        ",ldap_entries.dn ", &bi->sql_aliasing,
@@ -561,16 +567,22 @@ int
 backsql_db_close(
        BackendDB       *bd )
 {
+       backsql_info    *bi = (backsql_info*)bd->be_private;
+
        Debug( LDAP_DEBUG_TRACE, "==>backsql_db_close()\n", 0, 0, 0 );
+
+       backsql_conn_destroy( bi );
+
        Debug( LDAP_DEBUG_TRACE, "<==backsql_db_close()\n", 0, 0, 0 );
+
        return 0;
 }
 
 int
 backsql_connection_destroy( Backend *bd, Connection *c )
 {
-       char            opbuf[ OPERATION_BUFFER_SIZE ];
-       Operation*      op = (Operation *)opbuf;
+       OperationBuffer opbuf;
+       Operation*      op = (Operation *) &opbuf;
 
        op->o_hdr = (Opheader *)&op[ 1 ];
        op->o_connid = c->c_connid;