/* OpenParent * duplicate reference to parent database * NB - returned reference must be released */ LIB_EXPORT rc_t CC VTableOpenParentUpdate ( VTable *self, struct VDatabase **db ) { rc_t rc; if ( db == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcSelf, rcNull ); else if ( self -> db != NULL && self -> db -> read_only ) rc = RC ( rcVDB, rcTable, rcAccessing, rcDatabase, rcReadonly ); else { rc = VDatabaseAddRef ( self -> db ); if ( rc == 0 ) { * db = self -> db; return 0; } } * db = NULL; } return rc; }
/* OpenParent * duplicate reference to parent database * NB - returned reference must be released */ LIB_EXPORT rc_t CC VDatabaseOpenParentUpdate ( VDatabase *self, VDatabase **par ) { rc_t rc; if ( par == NULL ) rc = RC ( rcVDB, rcDatabase, rcAccessing, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull ); else if ( self -> dad != NULL && self -> dad -> read_only ) rc = RC ( rcVDB, rcDatabase, rcAccessing, rcDatabase, rcReadonly ); else { rc = VDatabaseAddRef ( self -> dad ); if ( rc == 0 ) { * par = self -> dad; return 0; } } * par = NULL; } return rc; }
/* OpenParent * duplicate reference to parent database * NB - returned reference must be released */ LIB_EXPORT rc_t CC VTableOpenParentRead ( const VTable *self, const VDatabase **db ) { rc_t rc; if ( db == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcVDB, rcTable, rcAccessing, rcSelf, rcNull ); else { rc = VDatabaseAddRef ( self -> db ); if ( rc == 0 ) { * db = self -> db; return 0; } } * db = NULL; } return rc; }
/* SetDatabase * call it if you work with Database * * "path" [ IN ] - path to the database that is used to access it */ LIB_EXPORT rc_t CC ReportResetDatabase ( const char *path, const VDatabase *db ) { rc_t rc = 0; Report* self = NULL; ReportGet(&self); if ( self != NULL ) { rc = VDatabaseAddRef ( db ); if ( rc == 0 ) { VTableRelease ( self -> table ), self -> table = NULL; VDatabaseRelease ( self -> db ); self -> db = db; } } return rc; }
/* AddRef * Release * all objects are reference counted * NULL references are ignored */ inline rc_t AddRef () const throw () { return VDatabaseAddRef ( this ); }
Sequence *SequenceInit(Sequence *self, VDatabase *db) { memset(self, 0, sizeof(*self)); self->db = db; VDatabaseAddRef(db); return self; }