TEST(collectonspace,sdbCreateCollection1_without_options) { sdbConnectionHandle connection = 0 ; sdbCSHandle collectionspace = 0 ; sdbCollectionHandle collection = 0 ; INT32 rc = SDB_OK ; bson option ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollectionSpace ( connection, COLLECTION_SPACE_NAME, &collectionspace ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbDropCollection ( collectionspace, COLLECTION_NAME ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_init( &option ); bson_append_int( &option, "ReplSize", 0 ); bson_finish( &option ) ; rc = sdbCreateCollection1 ( collectionspace, COLLECTION_NAME, &option, &collection ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_destroy( &option ) ; sdbDisconnect ( connection ) ; sdbReleaseCollection ( collection ) ; sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; }
INT32 expRoutine::_connectDB( sdbConnectionHandle &hConn ) { INT32 rc = SDB_OK ; const expOptions &options = _options ; #ifdef SDB_SSL if ( options.useSSL() ) { rc = sdbSecureConnect( options.hostName().c_str(), options.svcName().c_str(), options.user().c_str(), options.password().c_str(), &hConn ) ; } else #endif { rc = sdbConnect( options.hostName().c_str(), options.svcName().c_str(), options.user().c_str(), options.password().c_str(), &hConn ) ; } if ( SDB_OK != rc ) { PD_LOG ( PDERROR, "Failed to connect database %s:%s, rc = %d", options.hostName().c_str(), options.svcName().c_str(), rc ) ; goto error ; } done: return rc ; error: goto done ; }
TEST(collectonspace,sdbCreateCollection) { sdbConnectionHandle connection = 0 ; sdbCSHandle collectionspace = 0 ; sdbCollectionHandle collection = 0 ; INT32 rc = SDB_OK ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollectionSpace ( connection, COLLECTION_SPACE_NAME, &collectionspace ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbDropCollection ( collectionspace, COLLECTION_NAME ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbCreateCollection ( collectionspace, COLLECTION_NAME, &collection ) ; ASSERT_EQ( SDB_OK, rc ) ; sdbDisconnect ( connection ) ; sdbReleaseCollection ( collection ) ; sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; }
INT32 migExport::_connectDB() { INT32 rc = SDB_OK ; bson obj ; bson_init( &obj ) ; // connection is established #ifdef SDB_SSL if ( _pMigArg->useSSL ) { rc = sdbSecureConnect ( _pMigArg->pHostname, _pMigArg->pSvcname, _pMigArg->pUser, _pMigArg->pPassword, &_gConnection ) ; } else #endif { rc = sdbConnect ( _pMigArg->pHostname, _pMigArg->pSvcname, _pMigArg->pUser, _pMigArg->pPassword, &_gConnection ) ; } if ( rc ) { PD_LOG ( PDERROR, "Failed to connect database %s:%s, rc = %d", _pMigArg->pHostname, _pMigArg->pSvcname, rc ) ; goto error ; } // set prefer instance if( _pMigArg->pPrefInst ) { if ( FALSE == jsonToBson2 ( &obj, _pMigArg->pPrefInst, 0, 1 ) ) { rc = SDB_INVALIDARG ; ossPrintf ( "Error: prefered instance's format error"OSS_NEWLINE ) ; PD_LOG ( PDERROR, "prefered instance's format error" ) ; goto error ; } rc = sdbSetSessionAttr ( _gConnection, &obj ) ; if ( SDB_OK != rc ) { PD_LOG ( PDERROR, "Failed to set session attribute, rc = %d", rc ) ; goto error ; } } else { bson_empty( &obj ) ; } done: bson_destroy ( &obj ) ; return rc ; error: goto done ; }
TEST(cursor,sdbCursor_get_over_then_close) { INT32 rc = SDB_OK ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; sdbConnectionHandle connection = 0 ; sdbCollectionHandle collection = 0 ; sdbCursorHandle cursor = 0 ; INT32 NUM = 1 ; bson obj ; bson obj1 ; bson obj2 ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollection ( connection, COLLECTION_FULL_NAME, &collection ) ; ASSERT_EQ( SDB_OK, rc ) ; insertRecords ( collection, NUM ) ; rc = sdbQuery( collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_init(&obj); bson_init(&obj1); bson_init(&obj2); rc = sdbNext ( cursor, &obj ) ; CHECK_MSG("%s%d\n","rc = ",rc) ; ASSERT_EQ( SDB_OK, rc ) ; printf( "SdbNext record is:\n" ) ; bson_print( &obj ) ; printf("\n") ; rc = sdbNext ( cursor, &obj1 ) ; CHECK_MSG("%s%d\n","rc = ",rc) ; ASSERT_EQ( SDB_DMS_EOC, rc ) ; rc = sdbNext ( cursor, &obj1 ) ; CHECK_MSG("%s%d\n","rc = ",rc) ; ASSERT_EQ( SDB_DMS_CONTEXT_IS_CLOSE, rc ) ; bson_destroy( &obj ) ; bson_destroy( &obj1 ) ; bson_destroy( &obj2 ) ; rc = sdbCloseCursor( cursor ) ; CHECK_MSG("%s%d\n","rc = ",rc) ; ASSERT_EQ( SDB_OK, rc ) ; sdbDisconnect ( connection ) ; sdbReleaseCursor ( cursor ) ; sdbReleaseCollection ( collection ) ; sdbReleaseConnection ( connection ) ; }
TEST(cursor,sdbNext) { INT32 rc = SDB_OK ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; sdbConnectionHandle connection = 0 ; sdbCollectionHandle collection = 0 ; sdbCursorHandle cursor = 0 ; INT32 NUM = 10 ; SINT64 count = 0 ; bson obj ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollection ( connection, COLLECTION_FULL_NAME, &collection ) ; ASSERT_EQ( SDB_OK, rc ) ; insertRecords( collection, NUM ) ; rc = sdbQuery ( collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_init(&obj); rc = sdbCurrent( cursor, &obj ) ; printf( "Current record is:\n" ) ; bson_print( &obj ) ; printf("\n") ; bson_destroy( &obj ) ; bson_init(&obj); rc = sdbNext( cursor, &obj ) ; ASSERT_EQ( SDB_OK, rc ) ; printf( "Next record is:\n" ) ; bson_print( &obj ) ; printf("\n") ; bson_destroy(&obj); rc = sdbGetCount( collection, NULL, &count ) ; CHECK_MSG("%s%d\n","rc = ",rc) ; CHECK_MSG("%s%d%s%lld\n", "NUM = ", NUM, " count = ", count) ; ASSERT_EQ ( NUM, count ) ; sdbDisconnect ( connection ) ; sdbReleaseCursor ( cursor ) ; sdbReleaseCollection ( collection ) ; sdbReleaseConnection ( connection ) ; }
TEST(cursor,sdbCloseCursor) { INT32 rc = SDB_OK ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; sdbConnectionHandle connection = 0 ; sdbCollectionHandle collection = 0 ; sdbCursorHandle cursor = 0 ; INT32 NUM = 10 ; bson obj ; bson obj1 ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollection ( connection, COLLECTION_FULL_NAME, &collection ) ; ASSERT_EQ( SDB_OK, rc ) ; insertRecords ( collection, NUM ) ; rc = sdbQuery( collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; bson_init(&obj); rc = sdbCurrent( cursor, &obj ) ; ASSERT_EQ( SDB_OK, rc ) ; printf( "Current record is:\n" ) ; bson_print( &obj ) ; printf("\n") ; bson_destroy( &obj ) ; rc = sdbCloseCursor( cursor ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_init( &obj1 ) ; rc = sdbCurrent( cursor, &obj1 ) ; ASSERT_EQ( rc, SDB_DMS_CONTEXT_IS_CLOSE ) ; sdbDisconnect ( connection ) ; sdbReleaseCursor ( cursor ) ; sdbReleaseCollection ( collection ) ; sdbReleaseConnection ( connection ) ; }
INT32 main ( INT32 argc, CHAR **argv ) { // initialize local variables CHAR *pHostName = NULL ; CHAR *pServiceName = NULL ; CHAR *pUsr = NULL ; CHAR *pPasswd = NULL ; // define a connetion handle; use to connect to database sdbConnectionHandle connection = 0 ; // define a collection space handle sdbCSHandle collectionspace = 0 ; // define a collection handle sdbCollectionHandle collection = 0 ; // define a cursor handle for query sdbCursorHandle cursor = 0 ; sdbCursorHandle cursor1 = 0 ; // define local variables // initialize them before use INT32 rc = SDB_OK ; bson obj ; bson rule ; bson record ; bson updatecondition ; bson tmp ; bson_iterator it ; // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // read argument pHostName = (CHAR*)argv[1] ; pServiceName = (CHAR*)argv[2] ; pUsr = (CHAR*)argv[3] ; pPasswd = (CHAR*)argv[4] ; // connect to database rc = sdbConnect ( pHostName, pServiceName, pUsr, pPasswd, &connection ) ; if( rc!=SDB_OK ) { printf("Failed to connet to database, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // create collection space rc = sdbCreateCollectionSpace ( connection, COLLECTION_SPACE_NAME, SDB_PAGESIZE_4K, &collectionspace ) ; if( rc!=SDB_OK ) { printf("Failed to create collection space, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // create collection in a specified colletion space. rc = sdbCreateCollection ( collectionspace, COLLECTION_NAME, &collection ) ; if( rc!=SDB_OK ) { printf("Failed to create collection, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // prepare record bson_init( &record ) ; bson_append_int( &record, "age", 10 ) ; rc = bson_finish( &record ) ; CHECK_RC ( rc, "Failed to build bson" ) ; // insert record into database rc = sdbInsert( collection, &record ) ; if( rc!=SDB_OK ) { printf("Failed to insert, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } bson_destroy( &record ) ; // query all the record in this collection rc = sdbQuery(collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; if( rc!=SDB_OK ) { printf("Failed to query, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // get the record from cursor bson_init(&obj) ; bson_init(&tmp) ; rc=sdbNext( cursor, &obj ) ; if ( rc!= SDB_OK ) { printf("Failed to get next, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } rc = bson_copy( &tmp, &obj ) ; CHECK_RC ( rc, "Failed to copy bson" ) ; printf("Before update, the record is:\n") ; bson_print( &tmp ) ; // set the update condition using "_id" bson_find( &it, &obj, "_id" ) ; bson_init( &updatecondition ) ; bson_append_element( &updatecondition, NULL, &it ) ; rc = bson_finish( &updatecondition ) ; CHECK_RC ( rc, "Failed to build bson" ) ; // set the update rule bson_init( &rule ) ; bson_append_start_object ( &rule, "$set" ) ; bson_append_int ( &rule, "age", 99 ) ; bson_append_finish_object ( &rule ) ; rc = bson_finish ( &rule ) ; CHECK_RC ( rc, "Failed to build bson" ) ; // update rc = sdbUpdate(collection, &rule, &updatecondition, NULL ) ; if ( rc!=SDB_OK ) { printf("Failed to update, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } bson_destroy(&obj) ; bson_destroy(&rule) ; bson_destroy(&updatecondition) ; // query all the record in this collection again rc = sdbQuery(collection, NULL, NULL, NULL, NULL, 0, -1, &cursor1 ) ; if( rc!=SDB_OK ) { printf("Failed to query, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // get record from cursor1 bson_init(&obj) ; rc=sdbNext( cursor1, &obj ) ; if ( rc!= SDB_OK ) { printf("Failed to get next, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } printf("after update, the record is:\n") ; bson_print( &obj ) ; bson_destroy(&obj) ; done: // drop collection space rc = sdbDropCollectionSpace( connection, COLLECTION_SPACE_NAME ) ; if ( rc != SDB_OK ) { printf("Failed to drop collection space, rc = %d" OSS_NEWLINE, rc ) ; } // disconnect the connection sdbDisconnect ( connection ) ; // release the local variables sdbReleaseCursor ( cursor ) ; sdbReleaseCursor ( cursor1 ) ; sdbReleaseCollection ( collection ) ; sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; return 0; error: goto done ; }
INT32 main ( INT32 argc, CHAR **argv ) { // initialize local variables CHAR *pHostName = NULL ; CHAR *pServiceName = NULL ; CHAR *pUsr = NULL ; CHAR *pPasswd = NULL ; // define a connetion handle; use to connect to database sdbConnectionHandle connection = 0 ; // define a collection space handle sdbCSHandle collectionspace = 0 ; // define a collection handle sdbCollectionHandle collection = 0 ; // define a cursor handle for query sdbCursorHandle cursor = 0 ; // define local variables // initialize them before use INT32 rc = SDB_OK ; INT32 count = 0 ; bson obj ; bson rule ; bson objList [ NUM_RECORD ] ; // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // read argument pHostName = (CHAR*)argv[1] ; pServiceName = (CHAR*)argv[2] ; pUsr = (CHAR*)argv[3] ; pPasswd = (CHAR*)argv[4] ; // connect to database rc = sdbConnect ( pHostName, pServiceName, pUsr, pPasswd, &connection ) ; CHECK_RC ( rc, "Failed to connet to database" ) ; // create collection space rc = sdbCreateCollectionSpace ( connection, COLLECTION_SPACE_NAME, SDB_PAGESIZE_4K, &collectionspace ) ; CHECK_RC ( rc, "Failed to create collection space" ) ; // create collection in a specified colletion space. // Here,we build it up in the new collection. rc = sdbCreateCollection ( collectionspace, COLLECTION_NAME, &collection ) ; CHECK_RC ( rc, "Failed to create collection" ) ; // create record list using objList createRecordList ( &objList[0], NUM_RECORD ) ; // insert obj and free memory that allocated by createRecordList for ( count = 0; count < NUM_RECORD; count++ ) { // all the contents of inserted record are the same except _id rc = sdbInsert ( collection, &objList[count] ) ; if ( rc ) { printf ( "Failed to insert record, rc = %d" OSS_NEWLINE, rc ) ; } bson_destroy ( &objList[count] ) ; } // query all the record in this collection // and return the result by the cursor handle rc = sdbQuery(collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; CHECK_RC ( rc, "Failed to query" ) ; // get all the qureied records bson_init(&obj); while( !( rc=sdbNext( cursor, &obj ) ) ) { bson_print( &obj ) ; bson_destroy(&obj) ; bson_init(&obj); } bson_destroy(&obj) ; if( rc==SDB_DMS_EOC ) { printf("All the record had been list." OSS_NEWLINE ) ; } else if( rc!=SDB_OK ) { CHECK_RC ( rc, "Failed to get the record" ) ; } // drop the specified collection rc = sdbDropCollection( collectionspace,COLLECTION_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection" ) ; // drop the specified collection space rc = sdbDropCollectionSpace( connection,COLLECTION_SPACE_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection space" ) ; done: // disconnect the connection sdbDisconnect ( connection ) ; // release the local variables sdbReleaseCursor ( cursor ) ; sdbReleaseCollection ( collection ) ; sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; return 0; error: goto done ; }
INT32 main ( INT32 argc, CHAR **argv ) { // initialize local variables CHAR *pHostName = NULL ; CHAR *pServiceName = NULL ; CHAR *pUsr = NULL ; CHAR *pPasswd = NULL ; // define a connetion handle; use to connect to database sdbConnectionHandle connection = 0 ; // define a collection space handle sdbCSHandle collectionspace = 0 ; // define a collection handle sdbCollectionHandle collection = 0 ; // define a cursor handle for query sdbCursorHandle cursor = 0 ; // define local variables // initialize them before use bson obj ; bson rule ; bson condition ; INT32 rc = SDB_OK ; // read argument pHostName = (CHAR*)argv[1] ; pServiceName = (CHAR*)argv[2] ; pUsr = (CHAR*)argv[3] ; pPasswd = (CHAR*)argv[4] ; // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // connect to database rc = sdbConnect ( pHostName, pServiceName, pUsr, pPasswd, &connection ) ; if( rc!=SDB_OK ) { printf("Failed to connet to database, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // create collection space rc = sdbCreateCollectionSpace ( connection, COLLECTION_SPACE_NAME, SDB_PAGESIZE_4K, &collectionspace ) ; if( rc!=SDB_OK ) { printf("Failed to create collection space, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // create collection in a specified colletion space. rc = sdbCreateCollection ( collectionspace, COLLECTION_NAME, &collection ) ; if( rc!=SDB_OK ) { printf("Failed to create collection, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // insert records to the collection bson_init( &obj ) ; // insert a English record createEnglishRecord ( &obj ) ; rc = sdbInsert ( collection, &obj ) ; if ( rc ) { printf ( "Failed to insert record, rc = %d" OSS_NEWLINE, rc ) ; } bson_destroy ( &obj ) ; // query the records // the result is in the cursor handle rc = sdbQuery(collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; if( rc!=SDB_OK ) { printf("Failed to query, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } // update the record // let's set the rule and query condition first // here,we make the condition to be NULL // so all the records will be update bson_init( &rule ) ; bson_append_start_object ( &rule, "$set" ) ; bson_append_start_object ( &rule, "dev_id" ) ; bson_append_binary ( &rule, "id_rand", BSON_BIN_BINARY, "a", 1 ) ; bson_append_start_object ( &rule, "id_s" ) ; bson_append_int ( &rule, "year", 2005 ) ; bson_append_int ( &rule, "mon", 11 ) ; bson_append_int ( &rule, "day", 10 ) ; bson_append_int ( &rule, "num", 1024 ) ; bson_append_finish_object ( &rule ) ; //bson_append_binary ( &rule, "id_rand", BSON_BIN_BINARY, "a", 1 ) ; bson_append_finish_object ( &rule ) ; bson_append_finish_object ( &rule ) ; rc = bson_finish ( &rule ) ; CHECK_RC ( rc, "Failed to build bson" ) ; printf("The update rule is:") ; bson_print( &rule ) ; bson_init ( &condition ) ; bson_append_start_object ( &condition, "dev_id.id_s" ) ; bson_append_int ( &condition, "year", 2007 ) ; bson_append_int ( &condition, "mon", 11 ) ; bson_append_int ( &condition, "day", 10 ) ; bson_append_int ( &condition, "num", 1024 ) ; bson_append_finish_object ( &condition ) ; rc = bson_finish ( &condition ) ; CHECK_RC ( rc, "Failed to build bson" ) ; rc = sdbUpsert( collection, &rule, &condition, NULL ) ; if( rc!=SDB_OK ) { printf("Failed to update the record, rc = %d" OSS_NEWLINE, rc ) ; goto error ; } bson_destroy(&rule); printf("Success to update!" OSS_NEWLINE ) ; done: // drop collection space rc = sdbDropCollectionSpace( connection, COLLECTION_SPACE_NAME ) ; if ( rc != SDB_OK ) { printf("Failed to drop the specified collection,\ rc = %d" OSS_NEWLINE, rc ) ; }
INT32 main ( INT32 argc, CHAR **argv ) { // initialize local variables CHAR *pHostName = NULL ; CHAR *pServiceName = NULL ; CHAR *pUsr = NULL ; CHAR *pPasswd = NULL ; // define a connetion handle; use to connect to database sdbConnectionHandle connection = 0 ; // define a collection space handle sdbCSHandle collectionspace = 0 ; // define a collection handle sdbCollectionHandle collection = 0 ; // define a cursor handle for query sdbCursorHandle cursor = 0 ; // define local variables // initialize them before use bson obj ; bson rule ; INT32 rc = SDB_OK ; // read argument pHostName = (CHAR*)argv[1] ; pServiceName = (CHAR*)argv[2] ; pUsr = (CHAR*)argv[3] ; pPasswd = (CHAR*)argv[4] ; // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // connect to database rc = sdbConnect ( pHostName, pServiceName, pUsr, pPasswd, &connection ) ; CHECK_RC ( rc, "Failed to connet to database" ) ; // create collection space rc = sdbCreateCollectionSpace ( connection, COLLECTION_SPACE_NAME, SDB_PAGESIZE_4K, &collectionspace ) ; CHECK_RC ( rc, "Failed to create collection space" ) ; // create collection in a specified colletion space. rc = sdbCreateCollection ( collectionspace, COLLECTION_NAME, &collection ) ; CHECK_RC ( rc, "Failed to create collection" ) ; // insert records to the collection bson_init ( &obj ) ; // build a English record createEnglishRecord ( &obj ) ; // insert rc = sdbInsert ( collection, &obj ) ; CHECK_RC ( rc, "Failed to insert record" ) ; // query the records // the result is in the cursor handle rc = sdbQuery(collection, NULL, NULL, NULL, NULL, 0, -1, &cursor ) ; CHECK_RC ( rc, "Failed to query" ) ; // update the record // let's set the rule and query condition first // here,we make the condition to be NULL // so all the records will be update bson_init ( &rule ) ; bson_append_start_object ( &rule, "$set" ) ; bson_append_int ( &rule, "age", 19 ) ; bson_append_finish_object ( &rule ) ; bson_finish ( &rule ) ; CHECK_RC ( rc, "Failed to build bson" ) ; printf ( "The update rule is:" ) ; bson_print( &rule ) ; // update rc = sdbUpdate ( collection, &rule, NULL, NULL ) ; CHECK_RC ( rc, "Failed to update the record" ) ; // free memory after finish using bson bson_destroy ( &rule ) ; printf ( "Success to update!" OSS_NEWLINE ) ; // drop the specified collection rc = sdbDropCollection ( collectionspace,COLLECTION_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection" ) ; // drop the specified collection space rc = sdbDropCollectionSpace ( connection,COLLECTION_SPACE_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection" ) ; done: // disconnect the connection sdbDisconnect ( connection ) ; // release the local variables sdbReleaseCursor ( cursor ) ; sdbReleaseCollection ( collection ) ; sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; return 0; error: goto done ; }
INT32 main ( INT32 argc, CHAR **argv ) { // initialize local variables CHAR *pHostName = NULL ; CHAR *pServiceName = NULL ; CHAR *pUsr = NULL ; CHAR *pPasswd = NULL ; // define handles sdbConnectionHandle db = SDB_INVALID_HANDLE ; sdbCSHandle cs = SDB_INVALID_HANDLE ; sdbCollectionHandle cl = SDB_INVALID_HANDLE ; sdbLobHandle lob = SDB_INVALID_HANDLE ; INT32 rc = SDB_OK ; CHAR buf[BUFSIZE] = { 'a' } ; bson_oid_t oid ; // verify syntax if ( 5 != argc ) { displaySyntax ( (CHAR*)argv[0] ) ; exit ( 0 ) ; } // read argument pHostName = (CHAR*)argv[1] ; pServiceName = (CHAR*)argv[2] ; pUsr = (CHAR*)argv[3] ; pPasswd = (CHAR*)argv[4] ; // connect to database rc = sdbConnect ( pHostName, pServiceName, pUsr, pPasswd, &db ) ; CHECK_RC ( rc, "Failed to connet to database" ) ; // create collection space rc = sdbCreateCollectionSpace ( db, COLLECTION_SPACE_NAME, SDB_PAGESIZE_4K, &cs ) ; CHECK_RC ( rc, "Failed to create collection space" ) ; // create collection rc = sdbCreateCollection ( cs, COLLECTION_NAME, &cl ) ; CHECK_RC ( rc, "Failed to create collection" ) ; // create a large object and than write something to it // we need to gen an oid for the creating large object bson_oid_gen( &oid ) ; rc = sdbOpenLob( cl, &oid, SDB_LOB_CREATEONLY, &lob ) ; CHECK_RC ( rc, "Failed to create large object" ) ; // write something to the newly created large object rc = sdbWriteLob( lob, buf, BUFSIZE ) ; CHECK_RC ( rc, "Failed to write to large object" ) ; // close the newly created large object rc = sdbCloseLob( &lob ) ; CHECK_RC ( rc, "Failed to close large object" ) ; printf( "Success to create a large object and write something to it!\n" ) ; // drop the collection rc = sdbDropCollection( cs,COLLECTION_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection" ) ; // drop the collection space rc = sdbDropCollectionSpace( db,COLLECTION_SPACE_NAME ) ; CHECK_RC ( rc, "Failed to drop the specified collection space" ) ; done: // disconnect the connection sdbDisconnect ( db ) ; // release the handles // sdbReleaseLob ( lob ) ; sdbReleaseCollection ( cl ) ; sdbReleaseCS ( cs ) ; sdbReleaseConnection ( db ) ; return 0; error: goto done ; }
sdbReleaseCS ( collectionspace ) ; sdbReleaseConnection ( connection ) ; } TEST(collectonspace,sdbCreateCollection1_with_options) { printf("The test work in cluster environment\ with at least 2 data notes.\n") ; sdbConnectionHandle connection = 0 ; sdbCSHandle collectionspace = 0 ; sdbCollectionHandle collection = 0 ; INT32 rc = SDB_OK ; bson options ; rc = initEnv( HOST, SERVER, USER, PASSWD ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbConnect ( HOST, SERVER, USER, PASSWD, &connection ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = getCollectionSpace ( connection, COLLECTION_SPACE_NAME, &collectionspace ) ; ASSERT_EQ( SDB_OK, rc ) ; rc = sdbDropCollection ( collectionspace, COLLECTION_NAME ) ; ASSERT_EQ( SDB_OK, rc ) ; bson_init ( &options ) ; bson_append_start_object ( &options, "ShardingKey" ) ; bson_append_int ( &options, "age", 1 ) ; bson_append_int ( &options, "name", -1 ) ; bson_append_finish_object ( &options ) ; bson_append_int ( &options, "ReplSize", 2 ) ; bson_append_bool ( &options, "Compressed", true ) ;
INT32 RecordSharding::init(const vector<Host>& hosts, const string& user, const string& password, const string& csname, const string& clname, BOOLEAN useSSL) { INT32 rc = SDB_OK; sdbConnectionHandle conn = SDB_INVALID_HANDLE; sdbCursorHandle cursor = SDB_INVALID_HANDLE; bson cataObj; INT32 cataCount = 0; SDB_ASSERT(!_inited, "alreay inited"); _hosts = &hosts; _user = user; _password = password; _csname = csname; _clname = clname; _useSSL = useSSL; bson_init(&cataObj); for (vector<Host>::const_iterator it = hosts.begin(); it != hosts.end(); it++) { const Host& host = *it; if (SDB_INVALID_HANDLE != cursor) { sdbCloseCursor(cursor); sdbReleaseCursor(cursor); cursor = SDB_INVALID_HANDLE; } if (SDB_INVALID_HANDLE != conn) { sdbDisconnect(conn); sdbReleaseConnection(conn); conn = SDB_INVALID_HANDLE; } if (_useSSL) { rc = sdbSecureConnect(host.hostname.c_str(), host.svcname.c_str(), _user.c_str(), _password.c_str(), &conn); } else { rc = sdbConnect(host.hostname.c_str(), host.svcname.c_str(), _user.c_str(), _password.c_str(), &conn); } if (SDB_OK != rc) { PD_LOG(PDWARNING, "failed to connect to server %s:%s, rc=%d, usessl=%d", host.hostname.c_str(), host.svcname.c_str(), rc, _useSSL); rc = SDB_OK; continue; } rc = sdbGetSnapshot(conn, SDB_SNAP_CATALOG, NULL, NULL, NULL, &cursor); if (SDB_OK != rc) { if (SDB_INVALID_HANDLE != cursor) { sdbCloseCursor(cursor); sdbReleaseCursor(cursor); cursor = SDB_INVALID_HANDLE; } if (SDB_RTN_COORD_ONLY == rc) { PD_LOG(PDWARNING, "%s:%s is not coordinator", host.hostname.c_str(), host.svcname.c_str()); rc = SDB_OK; continue; } PD_LOG(PDWARNING, "failed to get coordinator group from %s:%s, rc = %d", host.hostname.c_str(), host.svcname.c_str(), rc); rc = SDB_OK; continue; } break; } if (SDB_INVALID_HANDLE == cursor) { rc = SDB_OK; PD_LOG(PDWARNING, "failed to get coordinator group"); goto done; } for(;;) { rc = sdbNext(cursor, &cataObj); if (SDB_OK != rc) { if (SDB_DMS_EOC == rc) { rc = SDB_OK; break; } PD_LOG(PDERROR, "failed to get cataObj from cursor, rc=%d", rc); goto error; } rc = _cataAgent.updateCatalog(bson_data(&cataObj)); if (SDB_OK != rc) { PD_LOG(PDERROR, "failed to update catalog agent, rc=%d", rc); goto error; } cataCount++; } if (0 == cataCount) { _inited = TRUE; goto done; } _collectionName = _csname + "." + _clname; rc = _cataAgent.getCataInfo(_collectionName, _cataInfo); if (SDB_OK != rc) { PD_LOG(PDERROR, "failed to get catalog info, rc=%d", rc); goto error; } _isMainCL = _cataInfo.isMainCL(); if (_cataInfo.isMainCL()) { vector<string> subCLList; INT32 subGroupNum = 0; rc = _cataInfo.getSubCLList(subCLList); if (SDB_OK != rc) { PD_LOG(PDERROR, "failed to get group by record, rc=%d", rc); goto error; } for (vector<string>::iterator it = subCLList.begin(); it != subCLList.end(); it++) { CataInfo cataInfo; rc = _cataAgent.getCataInfo(*it, cataInfo); if (SDB_OK != rc) { PD_LOG(PDERROR, "failed to get catalog info, rc=%d", rc); goto error; } subGroupNum += cataInfo.getGroupNum(); _subCataInfo[*it] = cataInfo; } _groupNum = subGroupNum; } else { _groupNum = _cataInfo.getGroupNum(); } _inited = TRUE; done: bson_destroy(&cataObj); if (SDB_INVALID_HANDLE != cursor) { sdbCloseCursor(cursor); sdbReleaseCursor(cursor); cursor = SDB_INVALID_HANDLE; } if (SDB_INVALID_HANDLE != conn) { sdbDisconnect(conn); sdbReleaseConnection(conn); conn = SDB_INVALID_HANDLE; } return rc; error: goto done; }