/* ===== * create a KDatabase as a sub of another KDatabase */ LIB_EXPORT rc_t CC KDatabaseCreateDB ( KDatabase *self, KDatabase **db, KCreateMode cmode, const char *name, ... ) { rc_t rc; va_list args; va_start ( args, name ); rc = KDatabaseVCreateDB ( self, db, cmode, name, args ); va_end ( args ); return rc; }
LIB_EXPORT rc_t CC VDatabaseVCreateDB ( VDatabase *self, VDatabase **dbp, const char *decl, KCreateMode cmode, const char *name, va_list args ) { rc_t rc; if ( dbp == NULL ) rc = RC ( rcVDB, rcDatabase, rcCreating, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcVDB, rcDatabase, rcCreating, rcSelf, rcNull ); else if ( decl == NULL ) rc = RC ( rcVDB, rcMgr, rcOpening, rcName, rcNull ); else if ( decl [ 0 ] == 0 ) rc = RC ( rcVDB, rcMgr, rcOpening, rcName, rcEmpty ); else if ( self -> read_only ) rc = RC ( rcVDB, rcDatabase, rcCreating, rcDatabase, rcReadonly ); else { rc = VDatabaseMake ( dbp, NULL, self, self -> schema ); if ( rc == 0 ) { VDatabase *db = * dbp; rc = KDatabaseVCreateDB ( self -> kdb, & db -> kdb, cmode, name, args ); if ( rc == 0 ) { rc = VDatabaseOpenUpdate ( db, decl ); if ( rc == 0 ) return 0; rc = ResetRCContext ( rc, rcVDB, rcDatabase, rcCreating ); } VDatabaseWhack ( db ); } } * dbp = NULL; } return rc; }