30 #include <sys/types.h>
43 DB* DB::aInstance =
nullptr;
45 DB::DB(
string& pConfigPathRef,
string& pQueryPathRef,
string& pDriverPathRef) :
HSEPObject(
"DB") {
61 if (
EC::OK == vErrorCode) {
74 delete aDBDrvLibraries;
87 aDBDrvLibraries->
clear();
91 string vPrefix(
"libHSEPDataDrv");
92 size_t vPrefixLen = vPrefix.length();
94 if (
EC::OK==DirTool::traverse(vFileNames,pDriverPathRef,vPrefix.c_str())) {
96 vFileNames.
forEach([&](
string* pFileName){
98 string vFilePath = pDriverPathRef;
99 vFilePath.append(
"/");
100 vFilePath.append(*pFileName);
102 size_t vSize = pFileName->size();
105 char* vTypeName = (
char*)malloc(vSize+1);
106 memset(vTypeName,0,vSize+1);
108 strncpy(vTypeName,pFileName->c_str()+vPrefixLen,vSize-vPrefixLen-3);
112 if (vLibrary->valid()) {
113 aDBDrvLibraries->
put(vTypeName,vLibrary);
116 cerr <<
"Loading library " << vTypeName <<
" " << vLibrary->lastErrorRef() << endl;
131 aEnvironments->clear();
134 bool vFailed =
false;
136 if (
EC::OK==DirTool::traverse(vFileNames,pConfigPathRef,
"db")) {
138 vFileNames.
forEach([&](
string* pFileName) {
141 string vFileName(pConfigPathRef);
143 vFileName.append(
"/");
144 vFileName.append(*pFileName);
148 vFile.open(vFileName,ios::in);
152 FileTool::retrieve(vDBConfig,vFile);
154 string& vDBType = vDBConfig.
ref(
"DBType");
155 string& vConnString = vDBConfig.
ref(
"ConnString");
156 string& vUser = vDBConfig.
ref(
"User");
157 string& vPassword = vDBConfig.
ref(
"Password");
158 string& vSchema = vDBConfig.
ref(
"Schema");
172 bool vHasSyncTo = vDBConfig.
has(
"SyncTo");
177 vSyncTo = string(vDBConfig.
ref(
"SyncTo"));
178 vSyncPath = string(vDBConfig.
ref(
"SyncPath"));
181 int vInstances = stoi(vDBConfig.
ref(
"Instances"));
185 for (
int vIdx=0; vIdx< vInstances; vIdx++) {
187 DBDrvLib& vLibrary = aDBDrvLibraries->
ref(vDBType);
196 if (
nullptr != vEnvironment) {
198 vEnvironment->
addID(vIdx);
204 (*aEnvironments)[*pFileName]->addEnvironment(vEnvironment);
217 cerr <<
"ERR:" << to_string(errno) << endl;
240 for (vEnvIterator = aEnvironments->begin() ; vEnvIterator != aEnvironments->end() ; vEnvIterator++) {
241 delete vEnvIterator->second;
242 vEnvIterator->second =
nullptr;