-rw-rw-r-- 1 2000 2000 12189 Mar 28 23:41 tools.cpp
-rw-rw-r-- 1 2000 2000 100 Mar 28 23:41TODO-rw-rw-r-- 1 2000 2000 21638 Mar 28 23:41 search.cpp
-rw-rw-r-- 1 2000 2000 3481 Mar 28 23:41 proto-ndb.h-rw-rw-r-- 1 2000 2000 41251 Mar 28 23:41 ndbio.cpp
-rw-rw-r-- 1 2000 2000 14667 Mar 28 23:41 modrdn.cpp
-rw-rw-r-- 1 2000 2000 17815 Mar 28 23:41 modify.cpp
-rw-rw-r-- 1 2000 2000 1643 Mar 28 23:41 Makefile.in
-rw-rw-r-- 1 2000 2000 11441 Mar 28 23:41 init.cpp
-rw-rw-r-- 1 2000 2000 8370 Mar 28 23:41 delete.cpp
-rw-rw-r-- 1 2000 2000 9865 Mar 28 23:41 config.cpp
-rw-rw-r-- 1 2000 2000 4212 Mar 28 23:41 compare.cpp
-rw-rw-r-- 1 2000 2000 3884 Mar 28 23:41 bind.cpp
-rw-rw-r-- 1 2000 2000 4186 Mar 28 23:41 back-ndb.h-rw-rw-r-- 1 2000 2000 772 Mar 28 23:41attrsets.conf-rw-rw-r-- 1 2000 2000 9191 Mar 28 23:41 add.cpp#cat init.cppstaticintndb_db_open( BackendDB*be, ConfigReply *cr )
{
struct ndb_info*ni = (struct ndb_info *) be->be_private;char sqlbuf[BUFSIZ], *ptr;intrc, i;if ( be->be_suffix ==NULL ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: need suffix");
Debug( LDAP_DEBUG_ANY,"%s\n",
cr->msg, 0, 0);
return-1;
}
Debug( LDAP_DEBUG_ARGS,
LDAP_XSTRING(ndb_db_open)": \"%s\"\n",
be->be_suffix[0].bv_val, 0, 0);if ( ni->ni_nconns < 1)
ni->ni_nconns = 1;
ni->ni_cluster = (Ndb_cluster_connection **)ch_calloc( ni->ni_nconns, sizeof( Ndb_cluster_connection *));for ( i=0; ini_nconns; i++) {
ni->ni_cluster[i] = new Ndb_cluster_connection( ni->ni_connectstr );
rc= ni->ni_cluster[i]->connect( 20, 5, 1);if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: ni_cluster[%d]->connect failed (%d)",
i, rc );
goto fail;
}
}for ( i=0; ini_nconns; i++) {
rc= ni->ni_cluster[i]->wait_until_ready( 30, 30);if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: ni_cluster[%d]->wait failed (%d)",
i, rc );
goto fail;
}
}
mysql_init(&ni->ni_sql );if ( !mysql_real_connect( &ni->ni_sql, ni->ni_hostname, ni->ni_username, ni->ni_password,"", ni->ni_port, ni->ni_socket, ni->ni_clflag )) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: mysql_real_connect failed, %s (%d)",
mysql_error(&ni->ni_sql), mysql_errno(&ni->ni_sql) );
rc= -1;
goto fail;
}
sprintf( sqlbuf,"CREATE DATABASE IF NOT EXISTS %s", ni->ni_dbname );
rc= mysql_query( &ni->ni_sql, sqlbuf );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: CREATE DATABASE %s failed, %s (%d)",
ni->ni_dbname, mysql_error(&ni->ni_sql), mysql_errno(&ni->ni_sql) );
goto fail;
}
sprintf( sqlbuf,"USE %s", ni->ni_dbname );
rc= mysql_query( &ni->ni_sql, sqlbuf );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: USE DATABASE %s failed, %s (%d)",
ni->ni_dbname, mysql_error(&ni->ni_sql), mysql_errno(&ni->ni_sql) );
goto fail;
}
ptr=sqlbuf;
ptr+= sprintf( ptr, "CREATE TABLE IF NOT EXISTS" DN2ID_TABLE "("
"eid bigint unsigned NOT NULL,"
"object_classes VARCHAR(1024) NOT NULL,"
"a0 VARCHAR(128) NOT NULL DEFAULT '',"
"a1 VARCHAR(128) NOT NULL DEFAULT '',"
"a2 VARCHAR(128) NOT NULL DEFAULT '',"
"a3 VARCHAR(128) NOT NULL DEFAULT '',"
"a4 VARCHAR(128) NOT NULL DEFAULT '',"
"a5 VARCHAR(128) NOT NULL DEFAULT '',"
"a6 VARCHAR(128) NOT NULL DEFAULT '',"
"a7 VARCHAR(128) NOT NULL DEFAULT '',"
"a8 VARCHAR(128) NOT NULL DEFAULT '',"
"a9 VARCHAR(128) NOT NULL DEFAULT '',"
"a10 VARCHAR(128) NOT NULL DEFAULT '',"
"a11 VARCHAR(128) NOT NULL DEFAULT '',"
"a12 VARCHAR(128) NOT NULL DEFAULT '',"
"a13 VARCHAR(128) NOT NULL DEFAULT '',"
"a14 VARCHAR(128) NOT NULL DEFAULT '',"
"a15 VARCHAR(128) NOT NULL DEFAULT '',"
"PRIMARY KEY (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15),"
"UNIQUE KEY eid (eid) USING HASH");/*Create index columns*/
if ( ni->ni_attridxs ) {
ListNode*ln;int newcol = 0;*ptr++ = ',';*ptr++ = ' ';for ( ln = ni->ni_attridxs; ln; ln=ln->ln_next ) {
NdbAttrInfo*ai = (NdbAttrInfo *)ln->ln_data;
ptr+= sprintf( ptr, "`%s` VARCHAR(%d),",
ai->na_name.bv_val, ai->na_len );
}
ptr= lutil_strcopy(ptr, "KEY" INDEX_NAME "(");for ( ln = ni->ni_attridxs; ln; ln=ln->ln_next ) {
NdbAttrInfo*ai = (NdbAttrInfo *)ln->ln_data;if ( newcol ) *ptr++ = ',';*ptr++ = '`';
ptr= lutil_strcopy( ptr, ai->na_name.bv_val );*ptr++ = '`';
ai->na_ixcol = newcol + 18;
newcol++;
}*ptr++ = ')';
}
strcpy( ptr,") ENGINE=ndb");
rc= mysql_query( &ni->ni_sql, sqlbuf );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: CREATE TABLE" DN2ID_TABLE "failed, %s (%d)",
mysql_error(&ni->ni_sql), mysql_errno(&ni->ni_sql) );
goto fail;
}
rc= mysql_query( &ni->ni_sql, "CREATE TABLE IF NOT EXISTS" NEXTID_TABLE "("
"a bigint unsigned AUTO_INCREMENT PRIMARY KEY ) ENGINE=ndb");if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: CREATE TABLE" NEXTID_TABLE "failed, %s (%d)",
mysql_error(&ni->ni_sql), mysql_errno(&ni->ni_sql) );
goto fail;
}
{
NdbOcInfo*oci;
rc= ndb_aset_get( ni, &ndb_optable, ndb_opattrs, &oci );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: ndb_aset_get( %s ) failed (%d)",
ndb_optable.bv_val, rc );
goto fail;
}for ( i=0; ndb_oplens[i] >= 0; i++) {if( ndb_oplens[i] )
oci->no_attrs[i]->na_len =ndb_oplens[i];
}
rc=ndb_aset_create( ni, oci );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: ndb_aset_create( %s ) failed (%d)",
ndb_optable.bv_val, rc );
goto fail;
}
ni->ni_opattrs =oci;
}/*Create attribute sets*/{
ListNode*ln;for ( ln = ni->ni_attrsets; ln; ln=ln->ln_next ) {
NdbOcInfo*oci = (NdbOcInfo *)ln->ln_data;
rc=ndb_aset_create( ni, oci );if( rc ) {
snprintf( cr->msg, sizeof( cr->msg ),"ndb_db_open: ndb_aset_create( %s ) failed (%d)",
oci->no_name.bv_val, rc );
goto fail;
}
}
}/*Initialize any currently used objectClasses*/{
Ndb*ndb;
const NdbDictionary::Dictionary*myDict;
ndb= new Ndb( ni->ni_cluster[0], ni->ni_dbname );
ndb->init(1024);
myDict= ndb->getDictionary();
ndb_oc_read( ni, myDict );
delete ndb;
}
#ifdef DO_MONITORING/*monitor setup*/rc=ndb_monitor_db_open( be );if ( rc != 0) {
goto fail;
}#endifreturn0;
fail:
Debug( LDAP_DEBUG_ANY,"%s\n",
cr->msg, 0, 0);
ndb_db_close( be, NULL );
return rc;
}