/*! * \internal * Attempts to create a driver - returns true on success */ bool WSqlDatabase::initDriver() { bool blnToReturn = false; std::string errmsg; switch(_driverType) { case WSql::NONE: errmsg = "WSqlDatabase: initDriver failed - no driver type set!"; break; case WSql::WSQLITE : _driver = new WSqliteDriver(this); if(0 == _driver) errmsg = "WSqlDatabase: initDriver failed - memory allocation error!"; else blnToReturn = true; break; case WSql::WMYSQL : _driver = new WMysqlDriver(this); if(0 == _driver) errmsg = "WSqlDatabase: initDriver failed - memory allocation error!"; else blnToReturn = true; break; case WSql::WMONGO : case WSql::WBERKLEYDB : case WSql::WPSQL : default: errmsg = "WSqlDatabase: initDriver failed - driver unsupported!"; } if(!errmsg.empty()) _errorStack.push_back(WSqlError(errmsg,1, WSqlError::SYSTEM, WSqlError::WARNING)); return blnToReturn; }
/*! \brief Initialize templates and metadata * * This method initializes the database metadata and loads the available * templates. It must be called (and optionally checked for success) \em before * run(). * Note also that the templates are expected to end in ".tpl", worm will attempt to * identify the type of template according to the filename. * * On failure this sets a message in the database object and returns false. * * \retval bool - true if templates and metadata successfully initialized. */ bool WormClassGenerator::init() { //load available templates DIR *dir; struct dirent *ent; dir = opendir ( _templateDirectory.c_str() ); if ( dir != NULL ) { WormCodeTemplate tpl; while ( ( ent = readdir ( dir ) ) != NULL ) { if ( ent->d_type != DT_REG ) continue; std::string entry = ent->d_name; size_t sz = entry.size(); if ( sz < MIN_TPL_FILENAME_SIZE ) continue; //only accept .tpl files std::string ext = entry.substr ( sz - 4 ); if ( ext.compare ( ".tpl" ) ) continue; tpl.setUri ( entry ); _templates.push_back ( tpl ); if( WormCodeTemplate::ClassDeclarationBase == tpl.type() ) usesBaseClass = true; /* maybe use, pass a string to ctemplate: std::string tmp; fs.open(entry.c_str()); while(fs) std::getline(fs,tmp); tpl.setContent(tmp); */ } closedir ( dir ); } else { std::string msg = "Cannot open directory: " + _templateDirectory; if ( errno == EACCES ) msg.append ( " - Access denied." ); _db.addError ( WSqlError ( msg, errno, WSql::WSqlError::SYSTEM, WSql::WSqlError::FATAL ) ); return false; } _db.initMetaData(); return true; }