/* OpenDBRead * VOpenDBRead * open a database for read * * "db" [ OUT ] - return parameter for newly opened database * * "path" [ IN ] - NUL terminated string in * wd-native character set giving path to database */ static rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self, const KDatabase **dbp, const KDirectory *wd, const char *path, va_list args ) { /* generate absolute path to db */ char dbpath [ 4096 ]; rc_t rc = KDirectoryVResolvePath ( wd, true, dbpath, sizeof dbpath, path, args ); if ( rc == 0 ) { KDatabase *db; const KDirectory *dir; /* open the directory if its a database */ rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL ); if ( rc == 0 ) { /* allocate a new guy */ rc = KDatabaseMake ( & db, dir, dbpath ); if ( rc == 0 ) { db -> mgr = KDBManagerAttach ( self ); * dbp = db; return 0; } KDirectoryRelease ( dir ); } } return rc; }
/* OpenColumnRead * VOpenColumnRead * open a column for read * * "col" [ OUT ] - return parameter for newly opened column * * "path" [ IN ] - NUL terminated string in UTF-8 giving path to col * where "." acts as a structure name separator, i.e. struct.member */ static rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *self, const KColumn **colp, const KDirectory *wd, bool try_srapath, const char *path, va_list args ) { char colpath [ 4096 ]; rc_t rc; size_t z; /* rc = KDirectoryVResolvePath ( wd, 1, colpath, sizeof colpath, path, args ); */ rc = string_vprintf( colpath, sizeof colpath, &z, path, args ); if ( rc == 0 ) { KColumn *col; const KDirectory *dir; /* open table directory */ rc = KDBOpenPathTypeRead ( self, wd, colpath, &dir, kptColumn, NULL, try_srapath ); if ( rc == 0 ) { rc = KColumnMakeRead ( & col, dir, colpath ); if ( rc == 0 ) { col -> mgr = KDBManagerAttach ( self ); * colp = col; return 0; } KDirectoryRelease ( dir ); } } return rc; }
static rc_t KDBManagerInsertDatabase ( KDBManager * self, KDatabase * db ) { rc_t rc; rc = KDBManagerOpenObjectAdd (self, &db->sym); if ( rc == 0 ) db -> mgr = KDBManagerAttach ( self ); return rc; }
/* OpenTableRead * VOpenTableRead * open a table for read * * "tbl" [ OUT ] - return parameter for newly opened table * * "path" [ IN ] - NUL terminated string in * wd-native character set giving path to table */ static rc_t KDBManagerVOpenTableReadInt ( const KDBManager *self, const KTable **tblp, const KDirectory *wd, bool try_srapath, const char *path, va_list args ) { rc_t rc; char tblpath [ 4096 ]; int z = ( args == NULL ) ? snprintf ( tblpath, sizeof tblpath, "%s", path ): vsnprintf ( tblpath, sizeof tblpath, path, args ); if ( z < 0 || ( size_t ) z >= sizeof tblpath ) rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcExcessive ); else { KTable *tbl; const KDirectory *dir; bool prerelease = false; rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptTable, NULL, try_srapath ); if ( rc != 0 ) { prerelease = true; rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptPrereleaseTbl, NULL, try_srapath ); } if ( rc == 0 ) { rc = KTableMake ( & tbl, dir, tblpath ); if ( rc == 0 ) { tbl -> mgr = KDBManagerAttach ( self ); tbl -> prerelease = prerelease; * tblp = tbl; return 0; } KDirectoryRelease ( dir ); } } return rc; }